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

mic*_*ael 38 wcf soap client-server fiddler

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

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

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

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


为了澄清,我想要做的是看到传入的实际消息.我不想对它们做任何事情,除了用自己的眼睛直观地看待它们.

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

而且为了进一步澄清,我不关心我使用什么工具,只要我可以轻松地看到消息本身.

Tre*_*vor 41

要查看消息内容,必须在配置文件中添加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>
Run Code Online (Sandbox Code Playgroud)

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

  • 我不得不从`System.ServiceModel.MessageLogging`中删除`propagateActivity ="true"`然后这对我有用 (12认同)

Hap*_*plo 14

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

启用WCF跟踪

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

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

  • 我一直看到这个答案对我不起作用.我希望看到完整的传入和传出消息.令人惊讶的是,WCF没有提供此功能.这对于ASMX来说是微不足道的. (3认同)

cas*_*One 5

如果你想programattically检查邮件,可以实现一个IClientMessageInspector接口,并与你的客户注册.

这允许您访问所有消息,无论您使用何种绑定,而使用Fiddler等工具只允许您使用HTTP传输通道检查消息.

请注意,使用此技术,您可以实际修改消息或执行更多操作(例如,触发通知).如果你想做的就是把注意力放在消息上,那么使用跟踪可能对你来说更容易.

  • IClientMessageInspector不捕获最终输出.我依靠这种方法来查看我的传出消息,但它没有捕获安全标头.因此,我浪费了几天.我假设标题不在那里,但我最终指向我的客户端在ASMX Web服务服务器上,该服务器具有良好的老式消息日志记录,在WCF之前真的有效,我看到我的标题实际上在那里. (5认同)