繁体   English   中英

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

[英]WCF - Inspect the messages being sent/received?

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

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

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

当我运行客户端时,我希望能够看到来回传递的消息。 我下载了 Fiddler,但它似乎不想显示任何正在发送的流量,除非我实际使用 web 浏览器。 我使用 Fiddler 是错误的还是我应该为此使用其他工具?


澄清一下,我要做的是查看传递的实际消息。我不想对它们做任何事情,除了用我自己的眼睛直观地看到它们。

我喜欢 WCF 服务日志实用程序,但我认为我的设置不正确。 我看不到实际的 soap 消息,只是收到了一条消息。

而且为了进一步澄清,我不在乎我使用什么工具,只要我可以很容易地看到消息本身。

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

这是一个示例配置文件:

<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

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

启用 WCF 跟踪

顺便说一句,有些人不知道,但是您可以同时从服务器端和客户端打开跟踪,查看器会以漂亮的图表向您显示服务器和客户端操作之间的相关性。

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

如果您想以编程方式检查消息,您可以实现IClientMessageInspector接口并将其注册到您的客户端。

这允许您访问所有消息,无论您使用什么绑定,而使用像 Fiddler 这样的工具将只允许您使用 HTTP 传输通道检查消息。

请注意,使用这种技术,您实际上可以做很多事情来修改消息或做更多事情(例如,触发通知)。 如果您只想关注消息,那么使用跟踪对您来说可能是一种更简单的方法。

您的服务是 SOAP 还是 RESTful? 您可以使用WCF 服务跟踪查看器工具查看 SOAP 消息头和正文。 此处为配置 web 服务以进行跟踪的说明

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

您还可以看到我在项目中是如何做到的—— 包装textMessageEncoding、日志编码器、自定义绑定元素配置

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM