2012-07-13 6 views
1

J'utilise XmlDocument pour lire le contenu d'un document XML, puis transmettre ce contenu dans le corps du message SOAP d'une demande de service Web. Cependant, les données qui sont en fait se passer le long de l'appel (qui a été lu à partir du document XML) et le <> symboles sont remplacés parXmlDocument pour lire le fichier XML, passé en tant que corps de message SOAP

&gt; and &lt; 

qui est à l'origine des problèmes à la réception.

Qu'est-ce qui me manque?

Voici un extrait de mon code:

string filePath = FileList.SelectedItem.Value; 
string doc = File.ReadAllText(filePath); 

XmlDocument xDoc = new XmlDocument { PreserveWhitespace = true }; 
xDoc.LoadXml(doc); 


MyService.TransactionRequest request = new MyService.TransactionRequest { message = xDoc.OuterXml }; 


MyService.TransactionClient client = new MyService.TransactionClient(); 


client.ProcessTransaction(request); 

Merci pour toute aide.

Répondre

0

Vous souhaiterez peut-être envelopper le contenu du message dans une construction CDATA, qui devrait (frapper sur bois) empêcher l'encodeur de message SOAP de transformer les balises XML dans votre chaîne.

string wrapped = "<![CDATA[" + xDoc.OuterXml + "]]>"; 
TransactionRequest request = new MyService.TransactionRequest { message = wrapped }; 

Si votre xDoc peut contenir des sections CDATA lui-même, alors vous devez faire un peu plus de travail, car les sections CDATA ne peuvent pas être imbriquées. Il y a une solution de contournement facile, cependant. Il suffit de remplacer toutes les occurrences de "]]>" par "]]]]><![CDATA[>" dans la chaîne à encapsuler.

string toWrap = xDoc.OuterXml.Replace("]]>", "]]]]><![CDATA[>"); 
string wrapped = "<![CDATA[" + toWrap + "]]>"; 
TransactionRequest request = new MyService.TransactionRequest { message = wrapped }; 

Voir http://en.wikipedia.org/wiki/CDATA.

Questions connexes