If ever you're needing to debug the interaction between a Web Service and its clients, Microsoft’s Fiddler is the tool to use - this includes WCF Services so long as they're using a HTTP transport. The only thing Fiddler won't do is decode messages that are sent using WCF's proprietary Binary encoding - until today, that is: at lunch time, I took advantage of Fiddler's neat extensibility mechanism and created a rough-and-ready Inspector that will translate binary messages from gobbledegook to plain xml for your debugging pleasure.
You can download the plug-in and source from MSDN Code Gallery. To use it, just drop the plug-in in the Inspectors folder of your Fiddler installation. Once you've reloaded Fiddler, switch to the Inspectors tab and look for WCF Binary.
Implementation Notes
- There’s a very helpful page on the Fiddler site which tells you how to build Inspectors in .Net.
- Fiddler gives each Inspector the raw bytes of each message, and it can do with it what it likes. Here’s how I decode a WCF Binary encoded message:
using System; using System.Runtime.Serialization; using System.ServiceModel.Channels; ... private static readonly BufferManager _bufferManager = BufferManager.CreateBufferManager(int.MaxValue, int.MaxValue); ... private string GetWcfBinaryMessageAsText(byte[] encodedMessage) { var bindingElement = new BinaryMessageEncodingBindingElement(); var factory = bindingElement.CreateMessageEncoderFactory(); var message = factory.Encoder.ReadMessage(new ArraySegment<byte>(encodedMessage), _bufferManager); return message.ToString(); }