wcf - WCF webservice 流式响应的最佳实践

标签 wcf web-services streaming stream

我正在尝试从 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/

相关文章:

c# - 为什么接收过多参数的 WCF 服务没有中断?

java - 尝试在 java 中使用 TLSv2 连接到 ssl url 时出现错误 "handshake_failure"

流数据

apache-kafka - Kafka Streams 应用程序设计原则

wcf - 严格版本化的 WCF 服务命名空间是否应该是契约(Contract)唯一的?

c# - 为什么远程调试对 IIS 托管的 WCF 服务不起作用?

.net - 使用 Windows 身份验证从 Mono 调用 WCF 服务

c# - 如何使用REST协议(protocol)登录WebService

web-services - session 变量和 Web 服务

linux - 将培训视频流式传输到远程办公室