不能打开文件

时间:2013-09-27 13:29:29

标签: c# web-services file

我正在使用此代码使用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:服务器无法执行   处理请求。 --->无法打开文件“fileName.pdf”。 --->不能   打开文件“filename.pdf”。在   System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage   消息,WebResponse响应,流responseStream,布尔值   asyncCall)at   System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(字符串   

中的methodName,Object []参数)

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

200位用户正在使用代码,它只会随机抛出异常。

2 个答案:

答案 0 :(得分:0)

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

您可以使用代码周围的锁(obj){}或更复杂的编组来解决此问题。

答案 1 :(得分:0)

使用this method

使用共享访问权限打开文件
public static FileStream Open(
    string path,
    FileMode mode,
    FileAccess access,
    FileShare share
)

编辑添加

只是为了确定,您可以打开此文件的任何地方,您需要打开它共享。如果任何超出Web服务器的任何东西都可以打开文件(并且你也不能让它以只读方式共享)。你可以通过在打开文件时捕获异常,睡眠100毫秒(或其他一些小的数量)并重试最多一次来解决问题。这不是一个好的解决方案,只是一个解决问题的黑客,因为你的意志会束缚你的服务器线程你会这样做。但是,如果这个hack有效,你就会知道这是实际问题(文件争用)