我正在尝试通过读取传入的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中。 想知道是否有人得到了更好的解决方案(解决方法),而不是将传入的流复制到内存流并进行处理。
答案 0 :(得分:1)
TCP是一种流协议,字节以任意速率流动。此外,网络流保持打开状态,直到它被流的一端关闭,这可能无法在呼叫期间的某个时刻为您提供准确的长度。由于这个原因,你通常会得到这些例外。
正如您所提到的,一旦您拥有自己的内存流,您可以在其中转储tcp流内容但仍然可以在流中进行更多控制。一旦您拥有了由您管理的内存流,您就可以直接从MemoryStream上传blob,