【问题标题】:XmlDocument to read XML file, passed as SOAP message bodyXmlDocument 读取 XML 文件,作为 SOAP 消息体传递
【发布时间】:2012-07-13 15:30:36
【问题描述】:

我正在使用 XmlDocument 读取 XML 文档的内容,然后将这些内容传递到 Web 服务请求的 SOAP 消息正文中。但是,在调用中实际传递的数据(从 XML 文档中读取)中, 符号被替换为

> and < 

这会导致接收端出现问题。

我错过了什么?

这是我的代码的 sn-p:

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

感谢所有帮助。

【问题讨论】:

    标签: c# web-services soap xmldocument


    【解决方案1】:

    您可能希望将消息的内容包装在 CDATA 构造中,这应该(敲木头)防止 SOAP 消息编码器转换字符串中的 XML 标记。

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

    如果您的 xDoc 本身可能包含 CDATA 部分,那么您需要做更多的工作,因为 CDATA 部分不能嵌套。不过,有一个简单的解决方法。只需将要包装的字符串中所有出现的"]]&gt;" 替换为"]]]]&gt;&lt;![CDATA[&gt;"

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-24
      • 1970-01-01
      • 1970-01-01
      • 2016-02-14
      • 2014-05-04
      • 2013-08-28
      相关资源
      最近更新 更多