vb.net - 通过 Web 参考的 Soap 请求中缺少命名空间前缀
问题描述
这是我的设置,我有一个 WSDL 文件,我将它导入到我的应用程序中,它创建了引用,我可以调用它来提出我的请求。一切都很好,只是请求缺少名称空间的前缀。我的请求看起来像这样(通过 SoapUI 捕获)
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<ATT_ADDR_VAL_REQ xmlns="http://lsr.att.com/preorder">
<ADDR_VAL_REQ xmlns="http://lsr.att.com/obf/tML/UOM">
<HDR>
<MSG_TIMESTAMP>0001-01-01T00:00:00</MSG_TIMESTAMP>
<CC>30H</CC>
<STATE>CA</STATE>
</HDR>
<PON>TESTPON</PON>
</ADDR_VAL_REQ>
</ATT_ADDR_VAL_REQ>
</soap:Body>
</soap:Envelope>
但是远程系统需要这样的东西,ns1 和 ns2 只是一个 samlpe 前缀可以是任何东西
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<ns1:ATT_ADDR_VAL_REQ xmlns:ns1="http://lsr.att.com/preorder">
<ns2:ADDR_VAL_REQ xmlns:ns2="http://lsr.att.com/obf/tML/UOM">
<ns2:HDR>
<ns2:MSG_TIMESTAMP>0001-01-01T00:00:00</ns2:MSG_TIMESTAMP>
<ns2:CC>30H</ns2:CC>
<ns2:STATE>CA</ns2:STATE>
</ns2:HDR>
<ns2:PON>TESTPON</ns2:PON>
</ns2:ADDR_VAL_REQ>
</ns1:ATT_ADDR_VAL_REQ>
</soap:Body>
</soap:Envelope>
ATT_ADDR_VAL_REQ 的外观也仅供参考
Partial Public Class ATT_ADDR_VAL_REQ
Private aDDR_VAL_REQField As ADDR_VAL_REQ
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute([Namespace]:="http://lsr.att.com/obf/tML/UOM")> _
Public Property ADDR_VAL_REQ() As ADDR_VAL_REQ
Get
Return Me.aDDR_VAL_REQField
End Get
Set
Me.aDDR_VAL_REQField = value
End Set
End Property
End Class
所以我想知道有没有什么地方可以设置系统使用命名空间前缀?
解决方案
你的样本
<ns1:ATT_ADDR_VAL_REQ xmlns="http://lsr.att.com/preorder">
<ns2:ADDR_VAL_REQ xmlns="http://lsr.att.com/obf/tML/UOM">
不是有效的 XML 文档,因为 ns1 和 ns2 未定义。使用前缀时看起来像这样
<ns1:ATT_ADDR_VAL_REQ xmlns:ns1="http://lsr.att.com/preorder">
<ns2:ADDR_VAL_REQ xmlns:ns2="http://lsr.att.com/obf/tML/UOM">
但意思完全一样
<ATT_ADDR_VAL_REQ xmlns="http://lsr.att.com/preorder">
<ADDR_VAL_REQ xmlns="http://lsr.att.com/obf/tML/UOM">
所以请求应该在服务器端传递。
我相信你不能影响通过配置或属性使用前缀。它需要编写自己的序列化程序或一些 IEndpointBehavior + IClientMessageInspector 来修改输出。
推荐阅读
- python - 在不使用 None 初始化类的情况下访问累积值
- mysql - 检索集合整数大于聚合关系计数的行
- bash - 无法在 bash 中读取值多字命令行参数
- reactjs - 在类组件上无法识别 React 的 PropTypes 导入
- arrays - 为什么 sscanf() 不将 CSV 文件中的行读入数组?
- xcode - XCode 和 VSCode 问题
- javascript - 在另一个 Javascript 文件中使用一个变量返回未定义
- html - 如何摆脱文件文本?
- python - 如何解决 Python Selenium 中未定义“TimeoutException”这个问题?
- python - 如何停止/跳出线程无限的while循环?