At the time of this writing, .NET's SOAP implementation still has a few issues that need to be worked out, primarily in the area of interoperability.
Slight variations between the way .NET implements SOAP and SOAP::Lite's implementation of SOAP, for example, cause some difficulty in allowing the two to work together out of the box. To illustrate the problem, follow the steps shown here. One would think that everything would work fine, but it doesn't. I'll point out why after we walk through it.
First, launch the Java TcpTunnelGui tool that ships with Apache SOAP, specifying port 8080 as the local listening port, and redirecting to whatever server you have your HelloWorld.asmx file deployed to:
C:\book>start java org.apache.soap.util.net.TcpTunnelGui 8080
Then, modify the Perl Hello World client to point to the HelloWorld.asmx file, but replace the server part of the URL with localhost:8080.
When you run the Perl script:
C:\book>perl hello_client1.pl James
The result is not what you would expect. The script ends without ever displaying the 'Hello James' result. If you take a look at the TcpTunnelGui tool, you'll see that the SOAP message is sent, but the .NET runtime rejects the request and issues a SOAP fault in response. This is shown in Example 3-19.
Example 3-19: SOAP fault from .NET
System.Web.Services.Protocols.SoapException: Server did
not recognize the value of HTTP Header SOAPAction:
at System.Web.Services.Protocols.SoapServerProtocol.Initialize( )
Type type, HttpContext cont"