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

时间:2009-12-20 06:29:31

标签: c# wcf json large-file-upload

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

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

3 个答案:

答案 0 :(得分:19)

如果您想上传大文件,您肯定需要查看WCF Streaming Mode

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

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

<bindings>
   <basicHttpBinding>
      <binding name="HttpStreaming" 
               maxReceivedMessageSize="2000000"
               transferMode="StreamedRequest"/>
   </basicHttpBinding>
</bindings>

然后你需要一个服务合约,它接收Stream类型的参数(用于上传),或者返回类型为Stream的值(用于下载)。

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

应该这样做!

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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