2013-09-27 176 views
0

我使用此代码使用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.Invoke(字符串 方法名 System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage 消息,WebResponse的响应,流responseStream,布尔 asyncCall),对象[]参数)at

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

代码被200多个用户使用,它只是随机抛出异常。

+1

'filename.pdf'不存在?或者至少不在服务所在的目录中?尝试将_entire_路径包含到文件中。 –

+0

此异常是否有内部异常? – Renan

+0

@DStanley它随机发生......并在下一刻工作。 – Mathematics

回答

0

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

您可以用代码中的lock(obj){}或一些更复杂的编组来解决此问题。

0

打开使用this method

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

编辑使用共享访问的文件已添加

只是可以肯定,你可以打开此文件的任何地方,你需要打开它的共享。如果有任何超大的Web服务器可以打开文件(并且你不能让它共享只读)。您可以通过在打开文件时捕获异常,睡眠100毫秒(或其他小量)并重试至n次,来解决问题。这不是一个好的解决方案,只是一个解决问题的方法,因为你会将你的服务器线程捆绑在一起,你会这样做。但是,如果这种破解工作,你会知道这是实际的问题(文件争用)

+0

谢谢,但没有任何不同的先生 – Mathematics

+0

请参阅附加答案 –