【问题标题】:memory exception using wcf wshttpbinding使用 wcf wshttpbinding 的内存异常
【发布时间】:2011-05-31 12:02:43
【问题描述】:
我有一个将文件上传到服务器的应用程序。我正在使用 nettcpbinding 和 wshttpbinding。当文件大于 200 MB 时,出现内存异常。解决这个问题,我看到人们推荐流式传输,当然它适用于大文件(>1GB)的 nettcpbinding,但是当使用 wshttpbinding 时,方法是什么?我应该更改为 basichttpbinding 吗?什么??谢谢。
【问题讨论】:
标签:
wcf
exception
memory
wshttpbinding
【解决方案1】:
我建议你暴露另一个端点只是为了上传这么大的数据。这可以有一个支持流的绑定。在我们之前的项目中,我们需要将文件上传到服务器作为业务流程的一部分。我们最终创建了 2 个端点,一个专门用于文件上传,另一个用于所有其他业务功能。
流数据服务可以是一种通用服务,用于将任何数据流式传输到服务器,并可能返回一个用于标识服务器上数据的令牌。对于后续请求,可以传递此令牌以操作服务器上的数据。
【解决方案2】:
如果您不想(或由于合法原因不能)更改绑定或使用流式传输,您可以做的是有一些带有签名的方法,如下所示:
void UploadFile(string fileName, long offset, byte[] data)
不是发送整个文件,而是发送小数据包,并告诉数据应该放在哪里。你可以添加更多的数据,当然,比如整个文件大小,文件的CRC来知道传输是否成功等等。