我正在尝试将应用程序与第三方Web服务集成。我必须调用的方法的签名是这样的(由VS代理生成器生成):
string MyFoo(string param1, string param2, string param3, string someXml)
现在前3个参数没有问题。根据供应商规范,第四个参数应包含“未转义的xml包装在CDATA块中”,如下所示:
<![CDATA[<?xml version="1.0" encoding="utf-8"?><rootNode></rootNode>]]>
现在,c#转义(我希望它会做)所有必须转义的字符,主要是“&lt;”和“&gt;”字符,即使在CDATA语句中,也会产生如下内容:
<![CDATA[<?xml version="1.0" encoding="utf-8"?><rootNode></rootNode>]]>
据我所知,这是一种正确的行为,并且无法覆盖它,因为它可能会生成错误的请求(无效的肥皂消息),甚至是安全问题。
有没有人知道我是否错过了什么,不知道什么,或者这是正确的,并且第三方网络服务的期望无法得到遵守?
感谢。
答案 0 :(得分:1)
我一直在为&gt;的类似问题摆弄?截至今天2天。对我有用的唯一可行解决方案是自己编写服务客户端(接口和客户端实现)。如果您的服务不时更改(这将无法通过3次点击重新生成/更新您的客户端),这将是一个问题。 让我告诉我我做了什么。
简单快速的食谱:
XmlDocument doc = new XmlDocument();
var section = doc.CreateCDataSection(someXmlString);
string result = client.MyFoo(param1, param2, param3, section);
答案 1 :(得分:1)
诉Kasparavičius是对的。但这很简单,只需在Reference.cs
中稍作修改即可。参数类型需要从string
更改为XmlCDataSection
。
private XmlCDataSection foo;
[System.Xml.Serialization.XmlElementAttribute(Order=2)]
public XmlCDataSection foo {
get {
return this.foo;
}
set {
this.foo = value;
this.RaisePropertyChanged("foo");
}
}
然后将参数添加为XmlCDataSection
var xmlDocument = new XmlDocument();
var parameter = xmlDocument.CreateCDataSection("<foo></foo>");