Vb.net 通过Web引用的Soap请求中缺少命名空间前缀

Vb.net 通过Web引用的Soap请求中缺少命名空间前缀,vb.net,soap,Vb.net,Soap,这是我的设置,我有一个WSDL文件,我将它导入到我的应用程序中,它创建了我可以调用以发出请求的引用。除了请求缺少名称空间的前缀外,一切正常。 我的请求如下(通过SoapUI捕获) 0001-01-01T00:00:00 30小时 加利福尼亚州 TESTPON 但是远程系统期望这样的东西,ns1和ns2只是一个samlpe前缀,可以是任何东西 <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xml

这是我的设置,我有一个WSDL文件,我将它导入到我的应用程序中,它创建了我可以调用以发出请求的引用。除了请求缺少名称空间的前缀外,一切正常。 我的请求如下(通过SoapUI捕获)


0001-01-01T00:00:00
30小时
加利福尼亚州
TESTPON
但是远程系统期望这样的东西,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>

0001-01-01T00:00:00
30小时
加利福尼亚州
TESTPON
这里的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
部分公共类附件地址请求
专用地址VAL REQU字段作为地址VAL REQU
'''
_
公共属性ADDR_VAL_REQ()作为ADDR_VAL_REQ
得到
Return Me.aDDR\u VAL\u requfield
结束
设置
Me.aDDR\u VAL\u REQField=值
端集
端属性
末级
因此,我想知道是否有任何地方可以设置系统使用名称空间前缀?

您的示例

<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来修改输出。

是的,您的权利我错过了那一个,只是做了一个基本编辑来显示名称空间问题。(我更新了示例)。那么,我在哪里可以找到有关如何通过IEndpointBehavoir和IClientMessageInspector执行此操作的更多信息呢?但这不是一个好主意。试着用WireShark来看看电线上到底发生了什么。
<ATT_ADDR_VAL_REQ xmlns="http://lsr.att.com/preorder">
   <ADDR_VAL_REQ xmlns="http://lsr.att.com/obf/tML/UOM">