我正在尝试从 WCF Web 服务中提取大量数据。请求相当小,而响应消息将非常大。目前,由于 IIS6 对其可分配的内存(~1.4GB)有限制,Web 服务正在引发 SystemOutOfMemory 异常。
我在一些博客中读到,实施流式传输可以解决我的问题。
有人可以分享他们在这个主题上的经验吗?我对任何可以共享的示例客户端和服务端代码或任何建议/最佳实践最感兴趣。内存流与文件流?返回类型应该是Stream、Message、Byte[]?
我的操作如下所示:(通常它会在响应数组中返回大量元素,约 200K 个元素)
MediumSizeResponseClass[] GetData(SmallSizeRequestClass request)
如果您只想流回响应,则使用transferMode=streamedResponse
在您的绑定配置中。这可确保仅传输返回的响应。
流函数的返回值必须是Stream
。然后,您可以从该流中读取数据并对其执行任何您需要执行的操作(存储它、分析它等等)。
所以基本上你会有一个类似这样的服务合同:
[ServiceContract]
interface IYourService
{
[OperationContract]
Stream GetData(SmallSizeRequestClass request);
}
在服务器上,您基本上只是写入流,而在客户端上,您从流中读取。
您查阅过 MSDN 文档吗WCF 流式传输 http://msdn.microsoft.com/en-us/library/ms731913.aspx?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)