为什么在实现WCF流式传输时maxReceivedMessageSize属性相关?由于缓冲和持久性由流的使用者处理,为什么WCF会关注单个服务操作可能需要多长时间?
我正在开发一个项目,可以处理从服务器到客户端的大型文件。我认为WCF流是一个很好的选择,因为它应该允许处理理论上无限的文件大小。我的客户端和服务器都将transportMode(在绑定上)设置为“Streamed”,并将消息设计为包含Streams。但是,这还不够,因为我收到一个CommunicationException,表明我需要增加maxReceivedMessageSize属性。遵循异常的建议,神奇地增加属性可以使一切工作完美。
我担心WCF迫使我“限制”我的服务/客户端可以处理多少,即使流量应该是“无限的”。如果出现的文件恰好大于我的绑定配置,则会发生相同的CommunicationException。我不明白为什么WCF会随意限制我处理大文件的能力,“何时”和“如何”我发送和存储这些文件现在是“我的”业务,因为我有一个流消费,但我希望。
我错过了什么吗?
答案 0 :(得分:7)
根据文档(至少我发现的内容),您被“强制”限制邮件大小的原因是安全性,主要是为了避免DoS攻击,通过发送也是如此大消息并充斥着系统。
作为防御机制,maxReceivedMessageSize会在最大值上设置上限 允许的接收消息大小。默认 maxReceivedMessageSize是64 KB,通常太低了 流媒体场景。 Source
maxReceivedMessageSize的最大大小为9,223,372,036,854,775,807字节。
希望这有帮助。