In this chapter you learned about some of the more advanced aspects of Web services, including SOAP extensions, asynchronous Web method calls, and control of XML wire formatting.
SOAP extensions enable you to insert your own code into the SOAP request and SOAP response processing loop. SOAP extensions can be executed before or after either serialization or deserialization operations on either the client or the server. To develop a SOAP extension, you derive a class from the SoapExtension class, and then implement custom GetInitializer(), Initialize(), ChainStream(), and ProcessMessage() methods.
The .NET Framework automatically enables asynchronous calls to Web methods whenever you create a proxy class on the client. The Web services server neither knows nor cares that a call is asynchronous; the changes are entirely on the client. You can use a callback delegate to run code when an asynchronous call is ready to complete, or you can use a WaitHandle object to wait for such calls either singly or in groups.
Although SOAP is a standard, it is implemented differently in different products. The .NET Framework enables you to tailor the XML wire format of SOAP messages with the help of attributes. This facility lets you create SOAP messages that will interoperate with other Web services components that were not created with the .NET Framework or languages.