L'appel ASP.NET service web à partir d'ASP à l'aide de SOAPClient

J'ai un ASP.NET webservice avec le long des lignes de:

[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
    }
}

Je vais appeler le service web à partir d'ASP en utilisant quelque chose comme:

provWSDL = "http://servername:12011/MessageProcessor.asmx?wsdl"
Set service = CreateObject("MSSOAP.SoapClient30")
service.ClientProperty("ServerHTTPRequest") = True
Call service.MSSoapInit(provWSDL)

xmlMessage = "<request><task>....various xml</task></request>"
result = service.ProcessMessage(xmlMessage)

Le problème que je rencontre est que lorsque le fichier XML atteint la méthode ProcessMessage, le web service de plomberie a ajouté un espace de noms par défaut le long de la voie. c'est à dire si j'ai mis un point d'arrêt à l'intérieur de ProcessMessage(XmlDocument message) je vois:

<request xmlns="http://internalservice.net/messageprocessing">
  <task>....various xml</task> 
</request>

Quand je capture les paquets sur le fil, je vois que le fichier XML envoyé par le SOAP toolkit est légèrement différent de celui envoyé par l' .NET WS client. Le SOAP toolkit envoie:

<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/">
    <SOAP-ENV:Body>
        <ProcessMessage xmlns="http://internalservice.net/messageprocessing">
            <message xmlns:SOAPSDK4="http://internalservice.net/messageprocessing">
                <request>
                    <task>...stuff to do</task>
                </request>
            </message>
        </ProcessMessage>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Tandis que l' .NET client envoie:

<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">
    <soap:Body>
        <ProcessMessage xmlns="http://internalservice.net/messageprocessing">
            <message>
                <request xmlns="">
                    <task>...stuff to do</task>
                </request>
            </message>
        </ProcessMessage>
    </soap:Body>
</soap:Envelope>

Il a été si longtemps depuis que j'ai utilisé l'ASP/SOAP toolkit pour l'appeler .NET, webservices, je ne me souviens pas de tous les trucs astucieux/SOAP-fu que j'ai utilisé pour tirer à contourner des trucs comme ça.

Des idées? Une solution est de frapper un callable de COM .NET proxy qui prend le XML comme un string param et appelle le WS en mon nom, mais c'est une couche supplémentaire de complexité/travail, j'espère ne pas faire.

OriginalL'auteur Kev | 2008-08-21