繁体   English   中英

如何在一台Web服务器上同步ASP.NET网站和ASP.NET Web服务之间的文件访问

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM