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 部分不能嵌套。不过,有一个简单的解决方法。只需替换要包装的字符串中所有出现的"]]>"with即可。"]]]]><![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 回答