如何正确记录从WCF客户端发送和接收的消息

时间:2012-05-22 14:52:36

标签: .net wcf logging

请不要使用 WCF跟踪工具回答,除非提供有关如何捕获实际消息(包括标头和错误)的明确说明。此link不起作用。

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

使用pre-wcf Web服务,您可以编写一个完美无缺的SoapExtension

3 个答案:

答案 0 :(得分:4)

写一个custom message encoder。它可以访问所有标题。关于你希望你的解决方案如何通用的deoending你可能需要写它,以便它在真正的编码器中得到。

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

答案 1 :(得分:2)

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

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

您还需要一个实现IDispatchMessageInspector

的类

答案 2 :(得分:1)

我也找到了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>

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