1

XmlDocument を使用して XML ドキュメントのコンテンツを読み取り、それらのコンテンツを Web サービス要求の SOAP メッセージ本文に渡します。ただし、(XML ドキュメントから読み取られた) 呼び出しで実際に渡されるデータでは、< および > 記号は次のように置き換えられます。

&gt; and &lt; 

これは、受信側で問題を引き起こしています。

私は何が欠けていますか?

ここに私のコードのスニペットがあります:

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);

助けてくれてありがとう。

4

1 に答える 1

0

メッセージのコンテンツを CDATA 構造でラップしたい場合があります。これにより、SOAP メッセージ エンコーダーが文字列内の XML タグを変換するのを防ぐことができます。

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

xDoc に CDATA セクション自体が含まれている可能性がある場合は、CDATA セクションをネストできないため、もう少し作業を行う必要があります。ただし、簡単な回避策があります。ラップされる文字列内の のすべての出現箇所"]]>"を置き換えるだけです。"]]]]><![CDATA[>"

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

http://en.wikipedia.org/wiki/CDATAを参照してください。

于 2012-07-13T18:52:15.470 に答える