当前位置:  开发笔记 > 编程语言 > 正文

ASP.NET应用程序中的文件锁定(读/写)

如何解决《ASP.NET应用程序中的文件锁定(读/写)》经验,为你挑选了1个好方法。

我有两个ASP.NET Web应用程序.一个负责处理一些信息并写入日志文件,另一个应用程序负责读取日志文件并根据用户请求显示信息.

这是我的Writer代码

public static void WriteLog(String PathToLogFile, String Message)
{
    Mutex FileLock = new Mutex(false, "LogFileMutex");
    try
    {
        FileLock.WaitOne();
        using (StreamWriter sw = File.AppendText(FilePath))
        {
            sw.WriteLine(Message);
            sw.Close();
        }    
    }
    catch (Exception ex)
    {
        LogUtil.WriteToSystemLog(ex);
    }
    finally
    {
        FileLock.ReleaseMutex();
    }
}

这是我的Reader代码:

private String ReadLog(String PathToLogFile)
{
    FileStream fs = new FileStream(
          PathToLogFile, FileMode.Open, 
          FileAccess.Read, FileShare.ReadWrite);
    StreamReader Reader = new StreamReader(fs);
    return Reader.ReadToEnd();
}

我的问题是,上面的代码是否足以阻止在网络环境中锁定environemnt?

编辑1:脏读是没关系的. 编辑2:使用新的互斥锁创建互斥锁(false,"LogFileMutex"),关闭StreamWriter



1> JoshBerke..:

听起来像是在尝试实现基本队列.为什么不使用一个为您提供保证可用性的队列.您可以将消息放入MSMQ,然后实现一个Windows服务,该服务将从队列中读取并将消息推送到DB.如果写入数据库失败,您只需将消息留在队列中(虽然您将要处理posion消息,因此如果失败导致数据错误,则不会以无限循环结束)

这将摆脱所有锁定问题,并为您的读者提供保证交付......

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有