WCF Web服务流响应的最佳实践

Dam*_*ian 4 streaming wcf web-services stream

我正在尝试从 WCF Web 服务中提取大量数据。请求相当小,而响应消息将非常大。目前,由于 IIS6 对其可分配的内存(~1.4GB)有限制,Web 服务正在引发 SystemOutOfMemory 异常。

我在一些博客中读到,实施流式传输可以解决我的问题。

有人可以分享他们在这个主题上的经验吗?我对任何可以共享的示例客户端和服务端代码或任何建议/最佳实践最感兴趣。内存流与文件流?返回类型应该是Stream、Message、Byte[]?

我的操作如下所示:(通常它会在响应数组中返回大量元素,约 200K 个元素)

MediumSizeResponseClass[] GetData(SmallSizeRequestClass request)
Run Code Online (Sandbox Code Playgroud)

mar*_*c_s 5

如果您只想流回响应,请transferMode=streamedResponse在绑定配置中使用。这可确保仅传输返回的响应。

流函数的返回值必须是Stream. 然后,您可以从该流中读取数据并对其执行任何您需要执行的操作(存储它、分析它等等)。

所以基本上你会有一个类似这样的服务合同:

[ServiceContract]
interface IYourService
{
    [OperationContract]
    Stream GetData(SmallSizeRequestClass request);
}
Run Code Online (Sandbox Code Playgroud)

在服务器上,您基本上只是写入流,而在客户端上,您从流中读取。

您是否查阅过有关WCF Streaming的 MSDN 文档?

  • MemoryStream 方法的问题不是在于您最终会在返回流之前加载所有内容吗?如果您要返回大文件,您最终会遇到瓶颈,不是吗? (5认同)