我正在尝试从WCF Web服务中提取大量数据。请求相当小,响应消息非常大。目前,由于IIS6可以为其分配的内存(~1.4GB)限制IIS服务,因此Web服务正在抛出SystemOutOfMemory异常。
我在一些博客中读过,实现流媒体将解决我的问题。
有人可以分享他们对这个主题的经验吗?我最感兴趣的是任何样本客户端&可以共享的服务端代码或任何建议/最佳实践。 MemoryStream vs FileStream?返回类型应该是Stream,Message,Byte []?
我的操作如下所示:(通常它会在响应数组中返回大量元素,~200K元素)
MediumSizeResponseClass[] GetData(SmallSizeRequestClass request)
答案 0 :(得分:4)
如果只想回传响应,请在绑定配置中使用transferMode=streamedResponse
。这样可以确保只返回返回的响应。
流功能的返回值必须为Stream
。然后,您可以从该流中读取并执行您需要执行的任何操作(存储,分析,无论如何)。
所以基本上你有这样的服务合同:
[ServiceContract]
interface IYourService
{
[OperationContract]
Stream GetData(SmallSizeRequestClass request);
}
在服务器上,您基本上只是写入流,而在客户端上,您从流中读取。
您是否在WCF Streaming上查阅了MSDN文档?