J'ai un webservice ASP.NET avec le long des lignes de:Appel service Web ASP.NET à partir d'ASP à l'aide SOAPClient
[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
}
}
J'appelle 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 XML atteint la méthode ProcessMessage, la plomberie du service Web a ajouté un espace de nom par défaut en cours de route. à savoir si je mets un point d'arrêt à l'intérieur ProcessMessage (message XmlDocument) Je vois:
<request xmlns="http://internalservice.net/messageprocessing">
<task>....various xml</task>
</request>
Lorsque je capture des paquets sur le fil que je peux voir que le XML envoyé par la boîte à outils SOAP est légèrement différent de celui envoyé par le .NET Client WS. La boîte à outils SOAP 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>
Alors que le client .NET 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 que je la boîte à outils ASP/SOAP pour appeler en webservices .NET, je ne me souviens pas toutes les astuces/SOAP-fu que j'avais l'habitude de tirer pour contourner des trucs comme ça.
Des idées? Une solution consiste à assommer un proxy .NET appelable COM qui prend le XML comme un paramètre de chaîne et appelle le WS en mon nom, mais c'est une couche supplémentaire de complexité/travail que j'espérais ne pas faire.
Oui oui ... marqué ... :) +1 – Kev