You can create a SoapExtensionAttribute and apply it to your web service methods.
Create a class that is derived from SoapExtensionAttribute.
Create another class that derives from SoapExtension.
The Type of your SoapExtensionAttribute should be the type of your SoapExtension.
Once you're in the SoapExtension, you have access to the moment where the data has been serialize/deserialized.
Here are the 4 specific stage:
SoapMessageStage.BeforeSerialize
SoapMessageStage.AfterSerialize *
SoapMessageStage.BeforeDeserialize *
SoapMessageStage.AfterDeserialize
The ones with the '*' are the stages where you want to access the stream.
From there, you can log the xml that gets in and out of you web service.
That's what we do here, it works perfectly.
Here's a link that explains more in details:
http://progtutorials.tripod.com/soapext.htm
Hope that have been of some help.