我有两个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
听起来像是在尝试实现基本队列.为什么不使用一个为您提供保证可用性的队列.您可以将消息放入MSMQ,然后实现一个Windows服务,该服务将从队列中读取并将消息推送到DB.如果写入数据库失败,您只需将消息留在队列中(虽然您将要处理posion消息,因此如果失败导致数据错误,则不会以无限循环结束)
这将摆脱所有锁定问题,并为您的读者提供保证交付......