WCF命名空间问题

时间:2015-10-09 14:22:25

标签: c# xml vb.net wcf

我试图复制一个网络服务,到目前为止还有一些问题,但是这个问题让我更加悲痛。

现有的使用我服务的应用程序无法更改,但由于我可以嗅探它发送的数据,我对相关问题非常了解。

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

我的服务获得了一个" 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>

我知道如何摆脱urn:在参数标签中, WIHTOUT将其从<urn:GetTestList>标签移除

1 个答案:

答案 0 :(得分:0)

我认为不能这样做。

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

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

我参与实施ISeralizable,但它当然只对“复杂”类型有效 - 即您可以按照自己的意愿序列化对象,购买时无法序列化int外部.NET希望你如何序列化。即使你以不同方式序列化你的对象,你也只能命名对象内部的东西,而不是对象本身。

最后我去谷歌找到了这个:Configure WCF service to accept unqualified parameter

如果您绝对需要这样做,您可能会在反序列化之前实现捕获WCF消息的内容并处理此问题。这听起来很痛苦。