我有一个我想与之交互的肥皂Web接口。肥皂请求的一部分应该如下:
<postCommand>
<ServiceData>Data</ServiceData>
</postCommand>
我从WSDL文件构建了Web参考,并获得了一个后命中率,让我将XML数据作为字符串输入。然后,我尝试了实际的帖子请求,并在提琴手中看到我的输出更像是这样:
<postCommand>
<ServiceData>Data </ServiceData>
<postCommand>
显然,这里有某种逃脱的事情,但是我不确定原因。
这是WSDL的相关部分:
<xs:element name="postCommand">
<xs:complexType>
<xs:sequence>
<xs:element name="dataXml" nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
相关的代码:
var postXml = new SoapWebService.postCommand
{
//At this point it's all properly formatted XML as a string
dataXml = soapEnvContent
};
var resp = apiClient.postCommand(postXml)
我以前从未遇到过这个逃脱的问题,所以我不确定如何进行。有没有办法避免XML逃脱?
我建议您使用CDATA
。实际上,这是一个错误的答案。因为,CDATA不是XML逻辑结构的一部分。您可以在HTML或DOM结构中使用CDATA,但事实上,CDATA不会解码任何内容。它只是浏览器或其他第三部分应用程序的标志。所以,
<postCommand>
<ServiceData>Data </ServiceData>
<postCommand>
此格式是正确编码SOAP的。您应该在响应中对其进行解码。您可以将HttpUtility.HtmlDecode
用于此目的。