我正在使用此代码使用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位用户正在使用代码,它只会随机抛出异常。
答案 0 :(得分:0)
请原谅我对Web服务的HTTP实现的无知,它可能会解释这一点 但如果您同时处理请求,则同时有两个请求可能会导致文件争用。
您可以使用代码周围的锁(obj){}或更复杂的编组来解决此问题。
答案 1 :(得分:0)
public static FileStream Open(
string path,
FileMode mode,
FileAccess access,
FileShare share
)
编辑添加
只是为了确定,您可以打开此文件的任何地方,您需要打开它共享。如果任何超出Web服务器的任何东西都可以打开文件(并且你也不能让它以只读方式共享)。你可以通过在打开文件时捕获异常,睡眠100毫秒(或其他一些小的数量)并重试最多一次来解决问题。这不是一个好的解决方案,只是一个解决问题的黑客,因为你的意志会束缚你的服务器线程你会这样做。但是,如果这个hack有效,你就会知道这是实际问题(文件争用)