我有两个 ASP.NET Web 应用程序。一个负责处理一些信息并写入日志文件,另一个应用程序负责读取日志文件并根据用户请求显示信息。
这是我为作家编写的代码
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();
}
}
这是我的读者代码:
private String ReadLog(String PathToLogFile)
{
FileStream fs = new FileStream(
PathToLogFile, FileMode.Open,
FileAccess.Read, FileShare.ReadWrite);
StreamReader Reader = new StreamReader(fs);
return Reader.ReadToEnd();
}
我的问题是,上面的代码足以防止网络花园环境中的锁定吗?
EDIT 1 :脏读没关系。EDIT 2 :使用 new Mutex(false, "LogFileMutex") 创建互斥体,关闭 StreamWriter
听起来你想实现一个基本队列。为什么不使用可以保证可用性的队列呢?您可以将消息放入 MSMQ,然后实现一个 Windows 服务,该服务将从队列中读取消息并将消息推送到数据库。如果写入数据库失败,您只需将消息留在队列上(尽管您需要处理位置消息,因此如果失败导致数据损坏,您不会陷入无限循环)
这将消除所有锁定问题,并保证您将内容交付给读者......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)