WCF Streaming和maxReceivedMessageSize

时间:2012-10-29 18:17:09

标签: wcf streaming buffering maxreceivedmessagesize

为什么在实现WCF流式传输时maxReceivedMessageSize属性相关?由于缓冲和持久性由流的使用者处理,为什么WCF会关注单个服务操作可能需要多长时间?

我正在开发一个项目,可以处理从服务器到客户端的大型文件。我认为WCF流是一个很好的选择,因为它应该允许处理理论上无限的文件大小。我的客户端和服务器都将transportMode(在绑定上)设置为“Streamed”,并将消息设计为包含Streams。但是,这还不够,因为我收到一个CommunicationException,表明我需要增加maxReceivedMessageSize属性。遵循异常的建议,神奇地增加属性可以使一切工作完美。

我担心WCF迫使我“限制”我的服务/客户端可以处理多少,即使流量应该是“无限的”。如果出现的文件恰好大于我的绑定配置,则会发生相同的CommunicationException。我不明白为什么WCF会随意限制我处理大文件的能力,“何时”和“如何”我发送和存储这些文件现在是“我的”业务,因为我有一个流消费,但我希望。

我错过了什么吗?

1 个答案:

答案 0 :(得分:7)

根据文档(至少我发现的内容),您被“强制”限制邮件大小的原因是安全性,主要是为了避免DoS攻击,通过发送也是如此大消息并充斥着系统。

  

作为防御机制,maxReceivedMessageSize会在最大值上设置上限   允许的接收消息大小。默认   maxReceivedMessageSize是64 KB,通常太低了   流媒体场景。 Source

maxReceivedMessageSize的最大大小为9,223,372,036,854,775,807字节。

希望这有帮助。