WCF - 检查发送/接收的消息?

时间:2011-06-02 14:27:08

标签: wcf soap client-server fiddler

我有两个解决方案:   - 服务器解决方案   - 客户解决方案

服务器将自己注册到我的localhost IIS:http://localhost/MyApp/

客户端从localhost应用程序添加WCF服务(服务引用):http://localhost/MyApp/MyService.svc

当我运行客户端时,我希望能够看到来回传递的消息。我下载了Fiddler,但除非我实际使用网络浏览器,否则它似乎不想向我显示任何流量。我使用Fiddler是错误还是我应该使用另一种工具呢?


为了澄清,我要做的是看到传入的实际消息。我不想对它们做任何事情,除非亲眼看到它们。

我喜欢WCF服务日志工具,但我认为我没有正确的设置。我看不到实际的肥皂信息,只是收到了一条消息。

而且为了进一步澄清,只要我能够轻松看到消息本身,我就不在乎使用什么工具。

6 个答案:

答案 0 :(得分:40)

要查看消息内容,必须在配置文件中添加System.ServiceModel.MessageLogging的源。跟踪查看器中的消息选项卡将显示特定服务调用的完整消息。

以下是配置文件示例:

<configuration>

...

   <system.diagnostics>
      <sources>
         <source name="System.ServiceModel"
                      switchValue="All"
                      propagateActivity="true">
            <listeners>
               <add name="traceListener" />
            </listeners>
         </source>
         <source name="System.ServiceModel.MessageLogging"
                      switchValue="All">
            <listeners>
               <add name="traceListener" />
            </listeners>
         </source>
      </sources>
      <sharedListeners>
         <add name="traceListener"
                 type="System.Diagnostics.XmlWriterTraceListener"
                 initializeData="c:\Traces.svclog" />
      </sharedListeners>
   </system.diagnostics>

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

...

</system.serviceModel>

...

</configuration>

有关详细信息,请参阅MSDN上的“配置跟踪”主题。 http://msdn.microsoft.com/en-us/library/ms733025.aspx

答案 1 :(得分:14)

也许我错过了什么,但...... 为什么不使用WCF跟踪功能?这是一个很棒的故障排除工具。我已将它用于IIS / WAS中托管的服务。

Enabling WCF Tracing

BTW,有些人不知道,但你可以同时从服务器端和客户端打开跟踪,查看器会在一个漂亮的图表中显示服务器和客户端操作之间的关联。

编辑:每当我必须捕获TCP / IP流量时,我都使用WireShark。如果您需要以编程方式执行此操作,可以使用SharpPCAP,这样我就可以根据从网络捕获的内容采取措施。但是对于故障排除,依靠WCF跟踪要好得多。

答案 2 :(得分:5)

如果您想以编程方式检查邮件,可以implement IClientMessageInspector interface并向您的客户注册。

这允许您访问所有消息,无论您使用什么绑定,而using tools like Fiddler只允许您使用HTTP传输通道检查消息。

请注意,使用此技术,您可以做很多实际修改消息或执行更多操作(例如,触发通知)。如果你想做的只是关注消息,那么using tracing对你来说可能更容易。

答案 3 :(得分:1)

您的服务是SOAP还是RESTful?您可以使用WCF Service Trace Viewer Tool查看SOAP消息标题和正文。配置Web服务以进行跟踪的说明是here

答案 4 :(得分:0)

看看这个StackOverflow线程:How to use Fiddler to monitor WCF service

它回答了你的一些问题。你也可以使用像WireShark这样的东西,如果你想检查线上的所有东西,而不是像Fiddler那样设置代理。

答案 5 :(得分:0)

在WCF中,我们可以使用另一种方式来查看实际的SOAP消息 - custom MessageEncoder - 一个低级管道扩展点。与消息检查器(IDispatchMessageInspector / IClientMessageInspector)不同,它看到原始字节内容,包括任何格式错误的XML数据。您需要将标准textMessageEncoding打包为自定义binding element并调整config文件以使用该自定义绑定。

另外,您可以在我的项目中看到我是如何做到这一点的 - wrapping textMessageEncoding,记录encoder,自定义绑定elementconfig