8

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

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

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

4

3 回答 3

4

编写自定义消息编码器。它可以访问所有标题。关于您希望解决方案的通用性如何,您可能需要编写它以使其进入真正的编码器。

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

于 2012-05-22T15:38:42.813 回答
2

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

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

您还需要一个实现 IDispatchMessageInspector 的类

于 2012-05-22T19:28:28.013 回答
1

我也发现了这个

<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>

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

于 2012-05-22T16:15:46.680 回答