Get SOAP Message before sending it to the WebService in .NET

You can simply serialize the request object, before subtmit, like this:

var sreq = new SomeSoapRequest();

// ... fill in here ...

var serxml = new System.Xml.Serialization.XmlSerializer(sreq.GetType());
var ms = new MemoryStream();
serxml.Serialize(ms, sreq);
string xml = Encoding.UTF8.GetString(ms.ToArray());

// in xml string you have SOAP request

What you need is a SoapExtension. There's quite a few good examples here:

How do I get access to SOAP response

Getting RAW Soap Data from a Web Reference Client running in ASP.net

XML Parse error while processing the SOAP response

One of the articles linked to: http://msdn.microsoft.com/en-us/magazine/cc164007.aspx

Also search SO for: https://stackoverflow.com/search?q=SoapExtension