WCF -已超出传入消息的最大消息大小配额

7
我从我的WCF服务中获取以下错误,该服务返回C#对象的查询结果。
“传入消息的最大消息大小配额(131072)已超过”
我知道如何通过MaxReceivedMessageSize解决此问题。我想知道的是如何找出是什么导致了消息大小。它看起来不像是纯数据,例如,如果我向我从服务中获取的数据添加5Kb的数据,则需要将MaxReceivedMessageSize增加5KB以上才能解决错误。
我还想知道是否有任何工具可以在调试器中查看消息大小。当我逐步执行代码到调用我的WCF服务的点时,似乎无法获取有关消息大小等的任何信息。
最后,如何修剪/优化消息大小!

设置MaxReceivedMessageSize所需的配置在这里:https://dev59.com/qXI_5IYBdhLWcg3wAd82 - Daniel Ballinger
2个回答

11

你能开启日志记录吗?如果在服务配置中包含以下代码片段:

<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\目录中)来分析该文件 - 它将向你展示消息的确切内容,并包括消息的“content-length”,因此,你可以准确地知道消息的大小。


6
我在使用Microsoft Service Trace Viewer,想知道如何找到“content-length”信息,但是我并没有看到它,请问应该去哪里查找? - reustmd
我在服务跟踪查看器中也看不到内容长度。 - stackoverflowuser
注意:查看器是“SvcTraceViewer.exe”。 - Michael Paulukonis
我可以在_svclog_文件中查看System.ServiceModel.Diagnostics.MessageNotLoggedQuotaExceeded。在C#中,我遇到了EndpointNotFoundExceptionWebException _404_错误。两个异常消息都没有提到QuotaExceeded - Kiquenet

0
您可以使用数据契约序列化器将消息序列化到MemoryStream,然后检查它占用了多少字节。

有什么好的示例吗?无论如何,我恭敬地建议,在设置MaxReceivedMessageSize配额时,解决方案听起来像WOMBAT。也许是为了调试目的。 - Kiquenet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接