面临问题在处理传入的TCP网络流时

时间:2012-10-09 08:29:29

标签: azure stream blob memorystream

我正在尝试通过读取传入的TCP网络流,通过FTP服务将文件(blob)上传到Azure存储。 每当我尝试在Uploadblob方法中执行stream.length,stream.seek等操作时,我都会遇到未处理的异常:

 Unhandled Exception!
 Error ID: 0
 Error Code: Unknown
 Is Warning: False
Type: System.NotSupportedException
 Stack:    at     System.ServiceModel.Dispatcher.StreamFormatter.MessageBodyStream.get_Length()

解决方法是从流中读取,直到它耗尽,将数据复制到MemoryStream中。 想知道是否有人得到了更好的解决方案(解决方法),而不是将传入的流复制到内存流并进行处理。

1 个答案:

答案 0 :(得分:1)

TCP是一种流协议,字节以任意速率流动。此外,网络流保持打开状态,直到它被流的一端关闭,这可能无法在呼叫期间的某个时刻为您提供准确的长度。由于这个原因,你通常会得到这些例外。

正如您所提到的,一旦您拥有自己的内存流,您可以在其中转储tcp流内容但仍然可以在流中进行更多控制。一旦您拥有了由您管理的内存流,您就可以直接从MemoryStream上传blob,