2010-07-20 8 views
1

Je quelques problèmes de construction d'un bien formaté SOAP utilisant XMLDocument en VB.NET (réponses C# sont bien bien).bâtiment message SOAP avec le message XMLDocument VB.NET

J'utilise le code suivant pour créer manuellement mon SOAP message, ce qui se passe est que le préfixe d'espace de noms du savon : En-tête et savon: corps sont dépouillée dans le fichier XML de sortie:

Dim soapEnvelope As XmlElement = _xmlRequest.CreateElement("soap", "Envelope", "http://schemas.xmlsoap.org/soap/envelope/") 
soapEnvelope.SetAttribute("xmlns:xsd", "http://www.w3.org/2001/XMLSchema") 
soapEnvelope.SetAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance") 
_xmlRequest.AppendChild(soapEnvelope) 
Dim soapHeader As XmlElement = _xmlRequest.CreateElement("soap", "Header", String.Empty) 
_xmlRequest.DocumentElement.AppendChild(soapHeader) 
Dim soapBody As XmlElement = _xmlRequest.CreateElement("soap", "Body", String.Empty) 
_xmlRequest.DocumentElement.AppendChild(soapBody) 

Il en résulte la sortie suivante:

<?xml version="1.0" encoding="UTF-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<Header> 
    ... 
</Header> 
<Body> 
    .... 
</Body> 
</soap:Envelope> 

Ce que j'ai besoin est:

<?xml version="1.0" encoding="UTF-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<soap:Header> 
    ... 
</soap:Header> 
<soap:Body> 
    .... 
</soap:Body> 
</soap:Envelope> 

NOTE: Je vous remercie de toutes les entrées, mais indépendamment de toute référence à la façon dont SOAP devrait fonctionner ou être analysé sur le côté de réception ou quelque chose comme ça, la ligne de fond est que je dois générer le XML comme décrit pour. Merci d'avance!

SOLUTION: Très similaire à Quartmeister réponse a été la façon dont je résolus cela. Le problème était en fait lié à l'espace de noms. Plutôt que d'utiliser la valeur de chaîne à chaque fois que, je la solution suivante en utilisant la NamespaceURI du DocumentElement:

Dim soapHeader As XmlElement = _xmlRequest.CreateElement("soap", "Header", _xmlRequest.DocumentElement.NamespaceURI) 
Dim soapBody As XmlElement = _xmlRequest.CreateElement("soap", "Body", _xmlRequest.DocumentElement.NamespaceURI) 

Répondre

2

Vous devez définir l'espace de noms XML sur l'en-tête et éléments du corps à l'espace de noms de savon :

Dim soapHeader As XmlElement = _xmlRequest.CreateElement("soap", "Header", "http://schemas.xmlsoap.org/soap/envelope/") 
Dim soapBody As XmlElement = _xmlRequest.CreateElement("soap", "Body", "http://schemas.xmlsoap.org/soap/envelope/") 
+0

@Quartmeister - +1 Merci pour la réponse. En fait, je venais de résoudre le problème en utilisant le DocumentElement.NamespaceURI, qui est essentiellement le même que votre réponse. Donnez-vous la réponse, car c'est correct. Merci! – jaywon

Questions connexes