System.Web.Services.Protocols ( class

You can inherit from this class to create a custom SOAP extension, which allows you to access and manipulate SOAP messages before they are sent or converted into objects. SOAP extensions can be used to implement additional encryption, compression, or tracing. They can also be applied to web services or web service clients.

The key to using a derived SoapExtension class is overriding the ProcessMessage( ) method. This method is called automatically by the ASP.NET framework at several different SoapMessageStages and provides you with the current SoapMessage object. You also connect your SoapExtension to a proxy class or web service method by using a custom SoapExtensionAttribute.

You can initialize a SoapExtension with a constructor method and the Initialize( ) and GetInitializer( ) methods. The GetInitializer( ) method is called only once (the first time a SOAP request is made). It gives you the opportunity to retrieve information about the web service or proxy method (in the methodInfo parameter) and custom SoapExtensionAttribute and return an appropriate initialization object. This object will be cached and provided to the Initialize( ) method, which is called every time a SOAP request is made.

public abstract class SoapExtension {
// Protected Constructors 
   protected SoapExtension( );
// Public Instance Methods
   public virtual Stream ChainStream(System.IO.Stream stream);
   public abstract object GetInitializer(LogicalMethodInfo methodInfo, SoapExtensionAttribute attribute);
   public abstract object GetInitializer(Type serviceType);
   public abstract void Initialize(object initializer);
   public abstract void ProcessMessage(SoapMessage message);

    Part I: Introduction to ASP.NET
    Part III: Namespace Reference
    Chapter 40. The System.Web.UI.MobileControls Namespace
    Chapter 42. The System.Web.UI.WebControls Namespace