10

为什么在实现 WCF 流时 maxReceivedMessageSize 属性是相关的?既然缓冲和持久性是由流的消费者处理的,为什么 WCF 会关心单个服务操作可能需要多长时间或多长时间?

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

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

我错过了什么吗?

4

1 回答 1

7

According to the documentation (at least what I've found), the reason you are "forced" to limit the size of your message is security, mostly to avoid DoS attacks, by sending too large messages and flooding the system.

As a defense mechanism, maxReceivedMessageSize places a cap on the maximum allowable size of messages on receive. The default maxReceivedMessageSize is 64 KB, which is usually too low for streaming scenarios. Source

The max size for maxReceivedMessageSize is 9,223,372,036,854,775,807 bytes.

Hope this helps.

于 2012-11-05T21:26:22.820 回答