WCF 最大消息大小配额

Posted

技术标签:

【中文标题】WCF 最大消息大小配额【英文标题】:WCF Maximum Message Size Quota 【发布时间】:2010-12-15 02:15:08 【问题描述】:

我正在尝试调用 WCF 服务(托管在 Windows 服务中,而不是 IIS 中)并且收到以下错误:

最大邮件大小配额 已超过传入消息 为远程通道。见 服务器日志以获取更多详细信息。

我尝试将 MaxReceivedMessageSize 和 ReaderQuotas 增加到它们的最大值,但没有任何运气。

我还打开了日志记录并检查了“发送”的消息大小。绝对远不及最大值。我们正在讨论发送一个序列化为 372KB XML 的对象。

两个问题:

    有谁知道该消息指的是什么“服务器日志”?我检查了 EventViewer,但没有显示任何内容...

    有谁知道这里可能会应用哪些其他配置设置?

【问题讨论】:

【参考方案1】:

两件事:

你能告诉我们服务器端和客户端的配置吗(只是相关的部分——端点、绑定配置)

您是否更改了双方(客户端和服务器)的值??

您可以影响大量的尺寸设置....

【讨论】:

【参考方案2】:

您可以在应用程序配置中指定服务器日志和路径,如下所示

 <system.diagnostics>
    <trace autoflush="true" />
    <sources>
      <source name="System.ServiceModel"

                    switchValue="Critical, Error, Warning"
              >
        <listeners>
          <add name="traceListener"
                        type="System.Diagnostics.XmlWriterTraceListener"
                        initializeData="F:\log-data\ServiceTrace.svclog"
            />
        </listeners>
      </source>
    </sources>

  </system.diagnostics>

【讨论】:

我已将此配置项添加到我的服务应用程序中,并且正在获取日志文件。但是,它只是显示发送爆炸的消息。它根本没有显示任何关于实际错误或其他任何内容的信息。【参考方案3】:

您的问题让我想起了 Shawn Wildermuth 的一篇博文,其中他在 Silverlight 应用程序中遇到了大消息大小的问题。也许这会对你有所帮助:

http://wildermuth.com/2009/09/10/Using_Large_Message_Requests_in_Silverlight_with_WCF

肖恩说:

诀窍是更改 web.config 中的 customBinding 以使用更大的默认值。我选择了 2MB,因为它是一个合理的大小。当然,如上所示将它们设置为 2GB 会起作用,但它确实会让您更容易受到攻击。选择一个不大于您的最大要求但又不过大的尺寸。它是一个猜谜游戏。要设置这些,您需要将它们添加到您的 web.config 中,将它们放在 httpTransport 节点上:

【讨论】:

谢谢!这篇文章真的很有帮助。【参考方案4】:

我认为服务器日志是指打开它时创建的跟踪和日志文件。这是MSDN link。

我使用 WCF 遇到的需要在我编写的应用程序中具有更高值的属性是 maxReceivedMessageSize、maxStringContentLength、maxArrayLength 和 maxBufferSize。 尝试增加它们,看看会发生什么。 WCF 很容易调试,因为它喜欢吞下异常。

【讨论】:

以上是关于WCF 最大消息大小配额的主要内容,如果未能解决你的问题,请参考以下文章

调用WCF时,调用已超过传入消息(65536)的最大消息大小配额。若要增加配额,请使用相应绑定。

WCF 已超过传入消息(65536)的最大消息大小配额 解决方案

WebService 之 已超过传入消息(65536)的最大消息大小配额。若要增加配额,请使用相应绑定元素上的 MaxReceivedMessageSize 属性。

WCF MaxReceivedMessageSize:超出最大邮件大小配额

WCF 流式传输错误(最大邮件大小配额)

WCF:如何设置 MaxReceivedMessageSize 配额