我有一个应用程序在多个 IIS 服务器上运行,需要解析放置在公共(public)网络驱动器上的 CSV 文件。如果我使用 System.IO.FileSystemWatcher Created event要在文件可用时收到事件通知,如何确保只有一台服务器解析文件?如果所有服务器都收到此更改的通知,则所有服务器都将尝试解析它。第一个服务器应该在本地复制它然后解析它吗?这会导致其他服务器出错吗?我应该将远程目录访问权限设置为只允许一台服务器读取访问权限吗?
该文件包含需要插入共享数据库的记录,但没有记录的唯一键。因此,如果多个服务器同时抓取文件并插入记录,就会在数据库中出现重复。
最佳答案
关键问题是:当所有这些人大致同时尝试解析文件时,是否会发生不好的事情?文件系统级别基本上允许多次读取访问,因此仅凭这一事实不一定会破坏任何东西。
我可能会尝试在第一次文件访问时创建锁定文件的方法,并让服务器在访问文件之前查找锁定文件。完成后删除锁定文件。
你也可以在文件上放置一个独占锁,一次只有一个服务器可以这样做。其他人将失败尝试:
FileStream fs = new FileStream(
FilePath,
FileMode.Open,
FileAccess.ReadWrite,
FileShare.None
);
关于c# - 只允许一台服务器访问网络驱动器上的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/220828/