xml - 如何防止序列化程序用 CDATA 包围字符串
问题描述
我正在寻找一种方法来停止我的 Web API 中的序列化程序以用 CDATA 标记括起来一个字符串。我的 Soap 服务使用正文中的转义字符串字段来保存 xml 文档。远程 SoapService 不理解和处理包含 CDATA 的字符串,因此我需要找到一种方法来告诉它不要将其包含在内,或者找到一种在发送之前将其删除的方法。
`<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>
解决方案
希望我的发现能帮助其他人,而不是在这个问题上浪费大量时间。我的问题是两个方面。一方面,我在代码中使用了SecurityElement.Escape(myString)来确保我的字符串已保存。然后,当我将字符串传递给我的肥皂调用时,系统试图再次清理它,这似乎是一种默认行为,导致“<”变成 int a <,远端无法理解并导致错误。第二个问题是我的字符串中存在 CDATA 标记,我认为这是我的问题的根源,但事实证明它确实不是 sting 的一部分,但 ReadyAPI 在 XML 视图中显示了它。在我去生之后,我发现它不存在。
推荐阅读
- django - 如何在 Django 中删除 ForeignKey 约束?
- typescript - 在动态 import() 中使用完整 URL
- button - 我如何在pyqt5中绑定qtquick按钮控件
- vue.js - 切换页面时Vue路由器挂载两次
- javascript - Service Worker 推送事件数据为空
- c# - 检查字符串是否包含匹配的字符串属性
- scheme - 在 script-fu (TinyScheme) 中连接字符串和变量
- php - 图像上传和显示
- asp.net-mvc-5 - 在生产环境中的 ASP.NET MVC 5 中的 URL 中隐藏项目名称
- javascript - Angular 应用程序仅在第二次点击事件后重定向