Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WCF - Inspect the messages being sent/received?

I have 2 solutions: - Server Solution - Client Solution

The server registers itself to my localhost IIS: http://localhost/MyApp/

The client adds WCF Services (Service References) from the localhost application: http://localhost/MyApp/MyService.svc

When I'm running the client I want to be able to see the messages being passed back and forth. I downloaded Fiddler, but it doesn't seem to want to show me any traffic being sent unless I actually use a web browser. Am I using Fiddler wrong or is there another tool I should be using for this?


To clarify, what I'm looking to do is to see the actual messages being passed in. I don't want to do anything with them except see them visually with my own eyes.

I like the WCF Service Log Utility, but I don't think I have the correct setting on there. I can't see the actual soap message, just that a message was received.

And also to clarify further, I don't care what tool I use as long as I can easily see the messages themselves.

like image 426
michael Avatar asked Jun 02 '11 14:06

michael


2 Answers

To view the message contents you must add a source for System.ServiceModel.MessageLogging in your configuration file. The message tab in the Trace Viewer will show the full message for a particular service call.

Here is a sample configuration file:

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

See the Configuring Tracing topic on MSDN for more information. http://msdn.microsoft.com/en-us/library/ms733025.aspx

like image 89
Trevor Tubbs Avatar answered Sep 30 '22 16:09

Trevor Tubbs


Maybe I'm missing something, but... Why don't you use the WCF tracing features? It's a fantastic troubleshooting tool. I've used it for services hosted in IIS/WAS also.

Enabling WCF Tracing

BTW, some people don't know it, but you can open traces from server side and client side at the same time, and the Viewer will show you the correlation between the server and client actions in a nice graph.

EDIT: whenever I had to capture TCP/IP traffic, I use WireShark. If you need to do it programatically you can use SharpPCAP, so I can take actions upon what I capture from the network. But for troubleshooting, much much better to rely on WCF Tracing.

like image 25
Haplo Avatar answered Sep 30 '22 17:09

Haplo