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();
}

1 comments:
I recently created a Burp plug-in for editing Binary XML data based on Richard Bergs decoder. You can find the plug-in and a Blog post explaining how it works here: http://www.gdssecurity.com/l/b/2009/11/19/wcf-binary-soap-plug-in-for-burp/
Post a Comment
If you have trouble posting a comment, try pressing the Preview button first - works for me!