我正在尝试从 WCF Web 服务中提取大量数据。请求很小,响应消息会很大。目前,由于 IIS6 对其可以分配的内存(~1.4GB)的限制,Web 服务正在引发 SystemOutOfMemory 异常。
我在一些博客中读到实现流式传输将解决我的问题。
任何人都可以分享他们对这个话题的经验吗?我对可以共享的任何示例客户端和服务端代码或任何建议/最佳实践最感兴趣。内存流与文件流?返回类型应该是Stream、Message、Byte[]?
我的操作如下所示:(通常它会在响应数组中返回大量元素,~200K 元素)
MediumSizeResponseClass[] GetData(SmallSizeRequestClass request)
最佳答案
如果您只想返回响应,请使用 transferMode=streamedResponse
在您的绑定(bind)配置中。这确保只有返回的响应将被流式传输。
流函数的返回值必须是 Stream
.然后,您可以从该流中读取并执行您需要对其执行的任何操作(存储、分析等)。
所以基本上你会有这样的服务契约(Contract):
[ServiceContract]
interface IYourService
{
[OperationContract]
Stream GetData(SmallSizeRequestClass request);
}
在服务器上,您基本上只是写入流,而在客户端,您从流中读取。
您是否在 WCF Streaming 上查阅过 MSDN 文档? ?
关于wcf - WCF webservice 流式响应的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2403002/