在WCF应用程序中设置MaxReceivedMessageSize和MaxBufferSize的问题

时间:2011-09-10 08:55:34

标签: wcf

我正在使用WCF实现一个大型文件流应用程序。

当我为 MaxReceivedMessageSize MaxBufferSize 设置配置时出现问题。当这些参数相同时,系统工作正常。但是,当我选择不同的值时,它会给出错误消息,

  

对于TransferMode.Buffered,MaxReceivedMessageSize和MaxBufferSize必须是相同的值。

但我与http://msdn.microsoft.com/en-us/library/ms733742.aspx中的信息混淆如下,

  

例如,假设您的服务必须接收最大4 GB的文件   大小并将它们存储在本地磁盘上。假设你的记忆   以这样的方式约束,你只能缓冲64 KB的数据   一时间然后,您将MaxReceivedMessageSize设置为4 GB和   MaxBufferSize为64 KB。此外,在您的服务实现中,您必须   确保您只读取64 KB块中的传入流   在写入上一个块之前,不要读取下一个块   磁盘并从内存中丢弃到4 GB,MaxBufferSize到64 KB。   此外,在您的服务实现中,您必须确保阅读   仅来自64 KB块的传入流,并且不读取下一个   上一个块之前的块已写入磁盘并被丢弃   来自记忆。

有人可以解释这件事的原因吗?

1 个答案:

答案 0 :(得分:5)

这是因为TransferMode。如果要使用与消息大小不同的缓冲区大小,则应将其设置为流式传输。

传输支持两种向每个方向传输消息的模式:

  • 缓冲传输将整个消息保存在内存缓冲区中,直到传输完成。

  • 流式传输仅缓冲邮件头并将邮件正文作为流公开,一次可以从中读取较小的部分。