通过Web引用在Soap请求中缺少名称空间前缀

时间:2018-05-29 21:03:34

标签: vb.net 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

所以我想知道我可以设置系统使用名称空间前缀吗?

1 个答案:

答案 0 :(得分:0)

的样本
<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">

不是有效的XML文档,因为未定义ns1和ns2。当使用前缀

时,它看起来像这样
<ATT_ADDR_VAL_REQ xmlns="http://lsr.att.com/preorder">
   <ADDR_VAL_REQ xmlns="http://lsr.att.com/obf/tML/UOM">

但其含义与

完全相同
/*All tasks*/
app.get('/allTasks',(req,res)=>{ //get (go to) the allTasks (hbs file)
  Todo.find().then((todos) => {
    //console.log(todos);
    var arrayOfTodos = [];
    var missionIndex = 0;
    todos.forEach(function(element){
      //console.log("\n\n\n\n\n elemnt details: ",element.text + "\n",element.completed+"\n");
      missionIndex = missionIndex + 1;
  var addToArrayJson = {
        text: element.text,
        completed: element.completed,
        missionNumber: missionIndex
      }
      arrayOfTodos.push(addToArrayJson);
      console.log("ff\n\n", addToArrayJson);
     });
     res.render("allTasks.hbs", {
       pageTitle: "All tasks: ",
       todos: arrayOfTodos
       });
       console.log("\n\n\n\n\n\n\ is::: \n\n\n\n\n",arrayOfTodos);
   });
   console.log("req is: \n\n\n", req);
});

所以请求应该在服务器端传递。

您不能通过我认为的配置或属性来影响使用前缀。它需要编写自己的序列化程序或一些IEndpointBehavior + IClientMessageInspector来修改输出。