title: Calling ASP.NET web service from ASP using SOAPClient
body: <p>I have an ASP.NET webservice with along the lines of:</p>
  
  <pre><code>[WebService(Namespace = "http://internalservice.net/messageprocessing")]
  [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
  [ToolboxItem(false)]
  public class ProvisioningService : WebService
  {
      [WebMethod]
      public XmlDocument ProcessMessage(XmlDocument message)
      {
          // ... do stuff
      }
  }
  </code></pre>
  
  <p>I am calling the web service from ASP using something like:</p>
  
  <pre><code>provWSDL = "http://servername:12011/MessageProcessor.asmx?wsdl"
  Set service = CreateObject("MSSOAP.SoapClient30")
  service.ClientProperty("ServerHTTPRequest") = True
  Call service.MSSoapInit(provWSDL)
  
  xmlMessage = "&lt;request&gt;&lt;task&gt;....various xml&lt;/task&gt;&lt;/request&gt;"
  result = service.ProcessMessage(xmlMessage)
  </code></pre>
  
  <p>The problem I am encountering is that when the XML reaches the ProcessMessage method, the web service plumbing has added a default namespace along the way. i.e. if I set a breakpoint inside ProcessMessage(XmlDocument message) I see:</p>
  
  <pre><code>&lt;request xmlns="http://internalservice.net/messageprocessing"&gt;
    &lt;task&gt;....various xml&lt;/task&gt; 
  &lt;/request&gt;
  </code></pre>
  
  <p>When I capture packets on the wire I can see that the XML sent by the SOAP toolkit is slightly different from that sent by the .NET WS client. The SOAP toolkit sends:</p>
  
  <pre><code>&lt;SOAP-ENV:Envelope 
      xmlns:SOAPSDK1="http://www.w3.org/2001/XMLSchema" 
      xmlns:SOAPSDK2="http://www.w3.org/2001/XMLSchema-instance" 
      xmlns:SOAPSDK3="http://schemas.xmlsoap.org/soap/encoding/" 
      xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"&gt;
      &lt;SOAP-ENV:Body&gt;
          &lt;ProcessMessage xmlns="http://internalservice.net/messageprocessing"&gt;
              &lt;message xmlns:SOAPSDK4="http://internalservice.net/messageprocessing"&gt;
                  &lt;request&gt;
                      &lt;task&gt;...stuff to do&lt;/task&gt;
                  &lt;/request&gt;
              &lt;/message&gt;
          &lt;/ProcessMessage&gt;
      &lt;/SOAP-ENV:Body&gt;
  &lt;/SOAP-ENV:Envelope&gt;
  </code></pre>
  
  <p>Whilst the .NET client sends:</p>
  
  <pre><code>&lt;soap:Envelope 
      xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt;
      &lt;soap:Body&gt;
          &lt;ProcessMessage xmlns="http://internalservice.net/messageprocessing"&gt;
              &lt;message&gt;
                  &lt;request xmlns=""&gt;
                      &lt;task&gt;...stuff to do&lt;/task&gt;
                  &lt;/request&gt;
              &lt;/message&gt;
          &lt;/ProcessMessage&gt;
      &lt;/soap:Body&gt;
  &lt;/soap:Envelope&gt;
  </code></pre>
  
  <p>It's been so long since I used the ASP/SOAP toolkit to call into .NET webservices, I can't remember all the clever tricks/SOAP-fu I used to pull to get around stuff like this.</p>
  
  <p>Any ideas? One solution is to knock up a COM callable .NET proxy that takes the XML as a string param and calls the WS on my behalf, but it's an extra layer of complexity/work I hoped not to do.</p>