C# 即使文件流为';在using语句中
我有一个像这样的wcf方法来上传文件块:C# 即使文件流为';在using语句中,c#,wcf,filestream,using,C#,Wcf,Filestream,Using,我有一个像这样的wcf方法来上传文件块: public void UploadChunk ( RemoteFileChunk file ) { using ( var targetStream = new FileStream("some-path", FileMode.OpenOrCreate, FileAccess.Append, FileShare.None) ) { file.Stream.CopyTo(targetStream); fil
public void UploadChunk ( RemoteFileChunk file )
{
using ( var targetStream = new FileStream("some-path", FileMode.OpenOrCreate, FileAccess.Append, FileShare.None) )
{
file.Stream.CopyTo(targetStream);
file.Stream.Close();
}
}
这是非常基本的东西。但在特殊情况下会发生什么是相当奇怪的。例外情况步骤:
CommunicationException
文件流
,但在本例中它没有关闭
我可能会错过什么
顺便说一句,我有另一个问题,我猜是由我不知道的同一个问题引起的。也许它能让你们找到一些线索。什么是RemoteFileChunk?我猜是RemoteFileChunk打开了文件。您尚未显示RemoteFileChunk的任何代码,该代码演示了在发生异常时它将自动关闭其流。这应该是可行的(尽管最好将close封装在RemoteFileChunk本身中):
因为您原来的流式处理操作没有完成。您重新尝试时,
UploadChunk
的最初执行是否失败?网络超时可能比您预期的时间长。我假设您遇到异常。在这种情况下,您应该将代码包围在try-catch-finally块中,并关闭流,无论发生什么意外情况。@Richard和@T McKeown我已经添加了第三步。第一次呼叫以通信异常结束,然后在互联网连接恢复后,我打第二次呼叫。@Richard,当你说超时时,我给了它一个机会,并等待了稍长一点(2-3分钟),现在它可以成功地打电话了。但它仍然是wierd,因为第一次调用实际上是在一个异常情况下完成的,我的服务和客户端的openTimeOut值是5分钟。给出异常的路径是“某个路径”,它与file.Stream
有什么关系?
public void UploadChunk ( RemoteFileChunk file )
{
using ( var targetStream = new FileStream("some-path", FileMode.OpenOrCreate, FileAccess.Append, FileShare.None) )
{
try
{
file.Stream.CopyTo(targetStream);
}
finally
{
file.Stream.Close();
}
}
}