如何通过WCF处理大文件上传?

我正在考虑将WCF用于一个项目,该项目需要人们将大文件(64MB-1GB)上传到我的服务器。 如何使用WCF处理此问题,可能还有恢复上传的function。

为了处理更大的客户群,我想通过WCF测试JSON。 这会如何影响文件上传? 可以从JSON完成,还是需要切换到REST上传部分?

如果你想上传大文件,你肯定需要研究WCF流模式 。

基本上,您可以更改绑定的传输模式; 默认情况下,它是缓冲的,即整个消息需要在发送方缓冲,序列化,然后作为一个整体传输。

使用Streaming,您可以定义单向流(仅适用于上载,仅适用于下载)或双向流。 这是通过将绑定的transferMode设置为StreamedRequestStreamedResponse或仅仅是纯Streamed

      

然后,您需要有一个服务合同,该合同要么接收Stream类型的参数(用于上传),要么返回Stream类型的值(用于下载)。

 [ServiceContract] public interface IFileUpload { [OperationContract] bool UploadFile(Stream stream); } 

应该这样做!

MTOM经过优化,可处理大型二进制数据。

您可以将webHttpBinding与TransferMode流式传输以及单个Stream参数或Stream响应(视情况而定)用于大型文件上传/下载,但您必须通过URL和/或标头发送任何请求元数据,除非您要设计你自己在Stream上的框架。 你必须构建一个自定义的非HTML客户端(如Silverlight,Flash等),因为浏览器不支持随机访问本地文件,而普通文件上传将是一个表单post,而不是JSON。