c# - 只允许一台服务器访问网络驱动器上的文件

标签 c# file-io networking

我有一个应用程序在多个 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/

相关文章:

c# - Visual Studio 2013 数据库创建错误 : a network related or instance specific error occurred while establishing connection with sqlserver

c# - WPF XAML 中的“无法创建”错误的实例

c# - 反编译器如何识别编译常量?

Java - 将文本文件读入数据库

android - 在 linux/c 中快速打开数千个文件

c - 有没有办法以编程方式识别 tcp 连接/端口的状态?

java - java 发送和接收二维数组

用于发出 HTTPS 请求的 C++ 高级网络库

c# - 在所有解决方案项目中共享域模型对象

c - 在比较两个文件的程序中使用多个不同的参数