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 属性。