![](/img/trans.png)
[英]Input on how to keep object map in sync between browser (javascript) and server (asp.net web service/database)?
[英]How to sync access to file between ASP.NET web site and ASP.NET web service on one web server
我已经在同一台Web服务器上部署了ASP.NET网站和ASP.NET Web服务。 两者都需要访问共享文件。
如何实现/共享支持单个作者和多个读者的锁? 如果有人读书,没有人可以写作,但是所有人仍然可以读书。 如果有人写,没有人可以读/写。
使用允许System.IO.FileShare.Read的System.IO.File.Open方法打开文件进行写入并允许其他线程读取它。 即:
System.IO.File.Open("path.txt",System.IO.FileMode.OpenOrCreate,System.IO.FileAccess.ReadWrite,System.IO.FileShare.Read)
其他(读取)线程应使用System.IO.FileAccess.Read
打开方法的签名:
public static FileStream Open(string path, FileMode mode, FileAccess access, FileShare share);
更新如果您需要所有实例临时写入文件。 使用Mutex类保留文件写入。 即:
Mutex mut = new Mutex("filename as mutex name");
mut.WaitOne();
//open file for write,
//write to file
//close file
mut.ReleaseMutex();
希望能帮助到你。
使用System.Threading命名空间中的ReaderWriterLock或ReaderWriterLockSlim(.NET 2.0)类来处理单个作者/多个读者案例。
好吧,您可以执行以下操作:
public class yourPage {
static object writeLock = new object();
void WriteFile(...) {
lock(writeLock) {
var sw = new StreamWriter(...);
... write to file ...
}
}
基本上,此解决方案仅适用于打开文件时间较短的情况。 您可能要考虑为读者缓存文件,或将文件写入临时文件,然后重命名以最大程度地减少对文件的争用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.