2011-06-02 161 views
35

我有2个解决方案: - 服务器解决方案 - 客户端解决方案WCF - 检查发送/接收的消息?

服务器本身注册到我的本地IIS:从本地主机应用http://localhost/MyApp/

客户端增加了WCF服务(服务引用):http://localhost/MyApp/MyService.svc

当我运行客户端时,我希望能够看到来回传递的消息。我下载了Fiddler,但它似乎并不想让我看到任何流量被发送,除非我真的使用网络浏览器。我使用Fiddler错误还是有另一个工具,我应该使用这个?


为了澄清,我在寻找什么做的是看到正在传递的实际消息。我不想与他们做任何东西,除了看他们在视觉上我自己的眼睛。

我喜欢WCF服务日志实用程序,但我不认为我在那里有正确的设置。我看不到实际的肥皂信息,只是收到了一条信息。

而且为了进一步阐明,我不在乎使用什么工具,只要我可以轻松地看到自己的消息。

回答

13

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

Enabling WCF Tracing

顺便说一句,有些人不知道,但你可以在同一时间打开来自服务器端和客户端的痕迹,而观众会告诉你在服务器和客户端的行为之间的相关性一个不错的图表。

编辑:每当我不得不捕获TCP/IP流量,我使用WireShark。如果您需要以编程方式执行此操作,则可以使用SharpPCAP,以便我可以对从网络捕获的内容采取操作。但是对于故障排除,依赖WCF Tracing要好得多。

+1

+1这是一个解决跟踪问题,而不是代码。 – 2011-06-02 14:34:29

+1

@德鲁马什:这是不可能的,海事组织,因为我们不确切知道迈克尔希望看到这些信息的目的。看到它们用于追踪目的是另一回事,因为您想要对它们进行修改或执行其他类型的通知。 – casperOne 2011-06-02 14:37:53

+0

@casperOne OP正在尝试使用Fiddler来查看它们,所以我认为它非常清楚它们是用于诊断目的。 – 2011-06-02 14:46:15

0

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

它回答大家的一些问题。你也可以使用类似WireShark的东西,如果你想检查网络上的所有东西,而不是像Fiddler那样设置代理服务器。

1

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

+0

我试图看到传递到我的服务器的SOAP消息。 – michael 2011-06-02 15:43:08

+0

@michael,你可以使用WCF跟踪查看器。我用更好的说明更新了链接。您需要测试web.config以在您的SOAP服务中启用跟踪。使用该工具,您将看到所有请求消息都触及该服务。 – retrodrone 2011-06-02 15:55:32

+2

@retrodone:说明仍然指向相同的网址(实际上,它们是相同的链接)。我做了这些链接中所说的,并且我得到了Trace.svcLog文件,但是即使将switchValue设置为All,我也没有看到实际的消息。我看到一条消息进来了,但是我没有看到我能在xml格式中看到* actual * soap消息本身的位置。 – michael 2011-06-03 19:19:11

5

如果你想检查邮件的编程,你可以implementIClientMessageInspector interface并注册它与客户端。

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

请注意,使用这种技术,您可以做很多实际修改消息或做更多事情(例如,关闭通知)。如果你想要做的只是把你的眼睛放在消息上,那么using tracing对你来说可能更容易。

+5

IClientMessageInspector不捕获最终输出。我依靠这种方法来查看我的传出消息,并且它没有捕获安全头。因为这个,我浪费了几天时间。我认为头不在那里,但我最终指出我的客户端在一个ASMX Web服务服务器上,它具有良好的老式消息日志功能,在WCF之前真正起作用,并且我看到我的头文件实际上在那里。 – JohnOpincar 2012-05-22 14:15:54

36

要查看消息内容,您必须在配置文件中添加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

+12

我不得不从'System.ServiceModel.MessageLogging'中删除'propagateActivity =“true”',然后这个工作对我来说 – Zane 2012-10-03 10:11:41

+0

这个解决方案对我来说(和Zane的注释一样),其中我发现的其他解决方案并不完整。 – 2013-09-19 13:15:22

+0

如果您确认'propagateActivity =“true”'应该被移除,为什么不修复答案?谢谢。 – Rbjz 2014-03-22 12:16:01