如何在WCF流模式下获取流上的Seek方法?
假设我有一个WCF方法如何在WCF流模式下获取流上的Seek方法?,wcf,stream,dotnetzip,Wcf,Stream,Dotnetzip,假设我有一个WCF方法 [OperationContract] bool UploadFile(Stream stream); 如何在流上获取Seek功能 我需要它满足两个要求: 读取流的前四个字节以确定文件类型是否具有50 4B 03 04ZIP文件签名,并倒带(stream.Seek(0,SeekOrigin.Begin)) 从流中读取DotNetZipIonic.Zip.ZipFile:ZipFile Zip=ZipFile.Read(流)(需要可查找流) 我发现你不能在WCF中寻找流
[OperationContract]
bool UploadFile(Stream stream);
如何在流
上获取Seek功能
我需要它满足两个要求:
50 4B 03 04
ZIP文件签名,并倒带(stream.Seek(0,SeekOrigin.Begin)
)Ionic.Zip.ZipFile
:ZipFile Zip=ZipFile.Read(流)
(需要可查找流)应该是这样的,因为最终您的数据将通过网络套接字发送,而网络套接字在设计上不支持查找(它只发送字节数组)。正如CodeCaster所提到的,您无法查找WCF流。您必须使用不同的方法解决您的问题:
MemoryStream
和原始WCF流的其余部分。这将基本上缓冲流的一部分,但是连接的流仍然呈现位于位置0的流,而不需要搜索流
包装类,该类将只缓冲到请求的最高流位置,这样,如果DotNetZip只在文件的第一个兆字节中查找,您将只缓冲一个兆字节的数据(而不是整个50GB文件)由于ionic zip不支持直接在流上工作,因此需要执行此额外步骤描述此代码的一点文字将大大改进此答案。
MemoryStream ms = new MemoryStream();
request.FileByteStream.CopyTo(ms);
s.Position = 0;
var zip = Ionic.Zip.ZipFile.Read(ms)