【问题标题】:WCF - The maximum message size quota for incoming messages has been exceededWCF - 已超出传入邮件的最大邮件大小配额
【发布时间】:2010-11-11 07:24:48
【问题描述】:

我的 WCF 服务出现以下错误,该服务返回 C# 对象中的查询结果。

传入邮件的最大邮件大小配额 (131072) 具有 已超过

我知道如何通过 MaxReceivedMessageSize 解决此问题 我想知道的是如何找出影响邮件大小的因素。在我看来,它不像是纯粹的数据,例如 如果我将 5Kb 的数据添加到我从服务中撤回的数据量中。我需要将 MaxReceivedMessageSize 增加 5KB 以上才能解决错误。

我还想知道在调试器中查看消息大小的任何工具。当我单步执行代码到调用 WCF 服务的位置时,我似乎无法获得有关消息大小等的任何信息

最后如何修剪/优化消息大小!

【问题讨论】:

标签: .net wcf web-services


【解决方案1】:

你能打开日志记录吗?如果您将这些 sn-ps 包含在您的服务配置中:

<system.diagnostics> 
  <sources>
    <source name="System.ServiceModel.MessageLogging" switchValue="Warning, ActivityTracing" >
      <listeners>
         <add name="xmlTrace" 
              type="System.Diagnostics.XmlWriterTraceListener"
              initializeData="c:\Traces\ServiceTrace.svclog" />
      </listeners>
    </source>
  </sources>
  <trace autoflush="true" />
</system.diagnostics>

<system.serviceModel>
  <diagnostics>
    <messageLogging 
        logMessagesAtTransportLevel="true" logMessagesAtServiceLevel="false" 
        logMalformedMessages="true" logEntireMessage="true" 
        maxSizeOfMessageToLog="65535000" maxMessagesToLog="500" />
  </diagnostics>
</system.serviceModel>

这将在您选择的目录中创建一个文件ServiceTrace.svclog。使用 WCF 服务跟踪查看器(在您的 c:\program files\Microsoft SDKs\Windows\v6.0A\bin\ 目录中找到)分析文件 - 它会显示消息的确切内容,还包括消息的“内容长度”,因此您会看到消息有多大。

【讨论】:

  • 在哪里可以找到“内容长度”信息,我打开了 Microsoft 服务跟踪查看器,但没有看到它...
  • 我在服务跟踪查看器中也看不到内容长度
  • 注意:查看器是“SvcTraceViewer.exe”
  • 我可以在 svclog 文件中查看 System.ServiceModel.Diagnostics.MessageNotLoggedQuotaExceeded。在 C# 中,我得到 EndpointNotFoundExceptionWebException 404 错误。没有关于 QuotaExceeded 的异常消息
【解决方案2】:

您可以使用 Data Contract Serializer 将消息序列化为 MemoryStream,然后检查总共有多少字节。

【讨论】:

  • 有什么好的样品吗?无论如何,恕我直言,当解决方案设置 MaxReceivedMessageSize 配额时,听起来像 WOMBAT。也许是调试目的。
猜你喜欢
  • 2018-01-15
  • 2015-09-15
  • 2015-06-13
  • 2012-03-13
  • 2014-02-13
  • 2012-05-14
  • 2011-02-23
相关资源
最近更新 更多