【问题标题】:How Can I Log Exactly The Messages Sent and Received From a WCF Client如何准确记录从 WCF 客户端发送和接收的消息
【发布时间】:2012-05-29 02:10:50
【问题描述】:

请不要使用 WCF 跟踪工具 回答,除非明确说明如何捕获实际消息,包括标题和错误。这个link 不起作用。

另外,不要回答IClientMessageInspector,除非您知道如何让它包含所有标题(它没有)并捕获具有无法解析的错误元素的响应。

使用 pre-wcf 网络服务,您可以编写一个完美运行的 SoapExtension

【问题讨论】:

    标签: .net wcf logging


    【解决方案1】:

    写一个custom message encoder。它可以访问所有标题。关于您希望解决方案的通用性如何,您可能需要编写它以使其进入真正的编码器。

    就在几天前,我在this thread 中实现了一个“包装编码器”。该编码器更改了消息。你不需要这样做,你可以像我一样记录它并将它传递给传输。

    【讨论】:

    • 稍后我将不得不试一试。我真的很想以人类可读的格式直接登录到我们现有的日志中。
    • 您需要 wcf 日志记录,而不是 wcf 跟踪。请参阅此处msdn.microsoft.com/en-us/library/ms730064.aspx 然后代替 System.Diagnostics.XmlWriterTraceListener 放置您自己的实现接口的类。虽然我自己没有做过
    • 我终于做到了——又一个说明 WCF 是多么不完整和多么痛苦的例子。
    • 作为自定义消息编码器的示例,您可以参考我的项目github.com/capslocky/WcfSoapLogger
    【解决方案2】:

    我也找到了this

    <system.diagnostics>
        <sources>
            <source name="System.ServiceModel.MessageLogging">
                <listeners>
                    <add name="messages"
                    type="System.Diagnostics.XmlWriterTraceListener"
                    initializeData="c:\log\wcfMessages.svclog" />
                </listeners>
            </source>
        </sources>
    </system.diagnostics>
    
    <system.serviceModel>
        <diagnostics>
            <messageLogging
                     logEntireMessage="true"
                     logMalformedMessages="true"
                     logMessagesAtServiceLevel="true"
                     logMessagesAtTransportLevel="true"
                     maxMessagesToLog="1000000"
                     maxSizeOfMessageToLog="10000000"/>
        </diagnostics>
    </system.serviceModel>
    

    这并不理想,因为您必须使用工具来查看消息,但它似乎确实可以捕获包含所有标题和错误等的实际消息。

    【讨论】:

    • 我尝试了它的解决方案,但它不包括标题。
    【解决方案3】:

    实现 IEndpointBehavior 的类允许您捕获和记录入站/出站消息。

    在此处查看示例http://msdn.microsoft.com/en-us/library/system.servicemodel.description.iendpointbehavior.applydispatchbehavior.aspx

    您还需要一个实现 IDispatchMessageInspector 的类

    【讨论】:

      猜你喜欢
      • 2019-08-25
      • 2015-01-16
      • 1970-01-01
      • 1970-01-01
      • 2020-07-10
      • 1970-01-01
      • 1970-01-01
      • 2015-03-28
      • 1970-01-01
      相关资源
      最近更新 更多