我有一个VB.NET网络应用程序前端和一个VB.NET窗口应用程序后端,都运行在我的AzureWindows2012服务器VM上。
后端每10秒运行一次,检查数据文件,有时写入数据。
当用户使用web时,前端(web)访问数据文件。
有时,web在执行My.Computer.FileSystem.WriteAllText或My.Computer.FileSystem.ReadAllText时会出错。
这两种方法都是后端和前端访问数据文件的方式。数据文件都是简单的基于.txt文本的文件.
发布于 2017-11-15 14:03:07
从故障是间歇性的事实来看,很可能您正在经历两个进程之间的争用问题。您可能希望手动写入文件,并确保您实现了一些至少可以缓解某些问题的共享:
Using fs As New FileStream(path, FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read),
sw As New StreamWriter(fs)
sw.Write("A whole bunch of text to write")
End Using上述代码在对其放置只读锁后打开该文件。这允许后续进程打开文件读取,因此即使在Windows应用程序中保存该文件时,web应用程序也可以读取文件中的内容,而无需抛出。
Using fs As New FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite),
sr As New StreamReader(fs)
Console.WriteLine(sr.ReadToEnd())
End Using最后一个片段是用来读取文件的。打开时,它会放置一个读/写共享。由于此进程仅从文件中读取,因此可以允许其他进程打开该进程进行读取,而不会出现问题。在这种情况下,我允许其他进程写入文件,使它们不受限制。
您将不得不处理由于另一个进程设置的锁而无法在您指定的模式下打开它时可能出现的异常。
https://stackoverflow.com/questions/47308169
复制相似问题