我正在使用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块的传入流,并且不读取下一个 上一个块之前的块已写入磁盘并被丢弃 来自记忆。
有人可以解释这件事的原因吗?
答案 0 :(得分:5)
这是因为TransferMode。如果要使用与消息大小不同的缓冲区大小,则应将其设置为流式传输。
传输支持两种向每个方向传输消息的模式:
缓冲传输将整个消息保存在内存缓冲区中,直到传输完成。
流式传输仅缓冲邮件头并将邮件正文作为流公开,一次可以从中读取较小的部分。