【问题标题】:WCF Namespace issuesWCF 命名空间问题
【发布时间】:2015-10-09 14:22:24
【问题描述】:

我正在尝试复制一个 Web 服务,到目前为止遇到了很多问题,但这个问题让我更加痛苦。

无法更改将使用我的服务的现有应用程序,但由于我可以嗅探它发送的数据,我很清楚问题出在哪里。

我的问题是现有的 Web 服务已经删除了参数上的命名空间,导致我的服务在每个参数上都没有收到任何内容。

我的服务在参数标签上获得了一个“urn:”:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:SOAPEWebIntf-ISOAPEWeb2">
   <soapenv:Header/>
   <soapenv:Body>
      <urn:GetTestList>
         <!--Optional:-->
         <urn:TestGroupID>1024</urn:TestGroupID>
      </urn:GetTestList>
   </soapenv:Body>
</soapenv:Envelope>

现有的应用程序发送这个:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:SOAPEWebIntf-ISOAPEWeb2">
   <soapenv:Header/>
   <soapenv:Body>
      <urn:GetTestList>
         <!--Optional:-->
         <TestGroupID>1024<TestGroupID>
      </urn:GetTestList>
   </soapenv:Body>
</soapenv:Envelope>

知道如何摆脱骨灰盒:在参数标记中,不将其从&lt;urn:GetTestList&gt; 标记中删除

【问题讨论】:

    标签: c# xml vb.net wcf


    【解决方案1】:

    我不认为这是可以做到的。

    您可以在服务级别设置命名空间(使用ServiceContract 属性),也可以在复杂参数中为值命名空间(使用DataContract 属性)。 p>

    <soapenv:Envelope xmlns:soapenv="http://schemas...." xmlns:hi="hello">
       <soapenv:Header/>
       <soapenv:Body>
          <hi:MyOperation>
             <hi:MyComplexParameter>
                 <Property1></Property1>
             </hel:data>
             ....
    

    我尝试过实现ISeralizable,但它当然只对“复杂”类型有效——即你可以随意序列化你的对象,购买你不能在.NET 之外序列化int想让你序列化。即使你对你的对象进行不同的序列化,你也只能命名对象内部的东西,而不是对象本身。

    最后我去google发现了这个:Configure WCF service to accept unqualified parameter

    如果你绝对需要这样做,你可能会实现一些东西,在反序列化之前捕获 WCF 消息并处理这个问题。这听起来很痛苦。

    【讨论】:

      猜你喜欢
      • 2016-06-14
      • 1970-01-01
      • 1970-01-01
      • 2011-02-05
      • 2013-06-25
      • 2013-03-26
      • 2016-05-14
      • 1970-01-01
      相关资源
      最近更新 更多