我正在寻找一种方法来停止我的Web API中的序列化器,以用CDATA标记将字符串括起来。我的肥皂服务使用主体中的转义字符串字段来保存xml文档。远程SoapService无法理解和处理CDATA括起来的String,因此我需要找到一种方法来告诉它不要将其封装起来,或者找到一种在发送之前将其删除的方法。
`<System.Web.Services.Protocols.SoapHeaderAttribute("AuthHeaderValue"), System.Web.Services.Protocols.SoapHeaderAttribute("tMLHeaderValue"),System.Web.Services.Protocols.SoapRpcMethodAttribute("", RequestNamespace:="java:lsr.webservice.wisor.com", ResponseNamespace:="java:lsr.webservice.wisor.com", Use:=System.Web.Services.Description.SoapBindingUse.Literal)> _
Public Function processSyncRequest(ByVal [string] As String) As <System.Xml.Serialization.XmlElementAttribute("response")> String
Dim results() As Object = Me.Invoke("processSyncRequest", New Object() {[string]})
Return CType(results(0),String)
End Function`
使用CDATA创建此正文
<string xmlns=""><![CDATA[<localserviceporequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.synchronoss.com/lsr/FTR_PO">
<addressvalidation>
<ccna>XD1</ccna>
<txnum />
<dtsent />
<tos />
<ctval />
<location>
<route />
<aft>N</aft>
<sano>1100</sano>
<sasf />
<sasd>S</sasd>
<sasn>Coast</sasn>
<sath>Hwy</sath>
<sass />
<city>Beach</city>
<state>CA</state>
<zip>90000</zip>
</location>
</addressvalidation>
</localserviceporequest>]]></string>
答案 0 :(得分:0)
希望我的发现可以帮助其他人在这个问题上不浪费大量时间。我的问题是两个方面。我曾经在代码中使用 SecurityElement.Escape(myString)来确保保存了我的字符串。然后,当我将字符串传递给我的Soap调用时,系统尝试再次对其进行清理,这似乎是默认行为,这导致“ <”变为int且远端无法理解并出现错误。第二个问题是我的字符串中存在CDATA标记,我认为这是问题的根源,但事实证明,这确实不是问题的一部分,但ReadyAPI在XML视图中显示了它。我去吃生菜之后,我发现那里不存在。