无法打开文件

本文关键字:文件 | 更新日期: 2023-09-27 18:32:59

我正在使用此代码通过Web服务读取文件,

FileStream stream = File.OpenRead(FileName);
byte[] contents = new byte[stream.Length];
stream.Read(contents, 0, (int)stream.Length);
stream.Close();

但我收到此错误

System.Web.Services.Protocols.SoapException:服务器无法 处理请求。---> 无法打开文件"文件名.pdf"。--->不能 打开文件"文件名.pdf"。 在 System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage 消息, 网络响应响应, 流响应流, 布尔值 asyncCall) at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String 方法名称, 对象[] 参数) at

也是随机的,有时它通过错误有时它不是。

代码被 200+ 用户使用,它只会随机抛出异常。

无法打开文件

请原谅我对Web服务的HTTP实现的无知,它可能解释了这一点但是,如果同时处理请求,则同时处理两个请求可能会导致文件争用。

您可以使用代码周围的 lock(obj){ } 或一些更复杂的编组来解决这个问题。

使用此方法使用共享访问打开文件

public static FileStream Open(
    string path,
    FileMode mode,
    FileAccess access,
    FileShare share
)

编辑已添加

可以肯定的是,您可以在任何地方打开此文件,都需要共享打开它。如果有任何超大的内容,Web 服务器可以打开该文件(并且您也不能将其设置为只读共享)。您可以通过在打开文件时捕获异常、睡眠 100 毫秒(或其他少量)并重试最多 nn 时间来解决此问题。这不是一个好的解决方案,只是一个解决问题的黑客,因为你会占用你的服务器线程,你会这样做。但是,如果此黑客有效,您将知道这是实际问题(文件争用)