C# WCF命名空间问题

C# WCF命名空间问题,c#,xml,vb.net,wcf,C#,Xml,Vb.net,Wcf,我试图复制一个web服务,到目前为止有很多问题,但这一个给了我额外的痛苦 无法更改将使用我的服务的现有应用程序,但由于我可以嗅探它发送的数据,因此我对问题有了相当好的了解 我的问题是,现有的web服务已经删除了参数上的名称空间,导致我的服务在每个参数上都没有收到任何内容 我的服务在参数标记上得到一个“urn:”: <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="ur

我试图复制一个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>

1024
现有应用程序发送以下消息:

<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>

1024

你知道如何去掉urn吗:在参数标记中,不从
标记中删除它?

我认为这是不可能的

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


....
我曾经尝试过实现
iSerializable
,但它当然只对“复杂”类型有效,也就是说,您可以按照自己的意愿序列化对象,但是除了.NET希望您序列化的方式之外,您不能序列化
int
。即使以不同的方式序列化对象,也只能为对象内部的内容命名,而不能为对象本身命名

最后我去了谷歌,发现了这个:


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

我认为这是办不到的

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


....
我曾经尝试过实现
iSerializable
,但它当然只对“复杂”类型有效,也就是说,您可以按照自己的意愿序列化对象,但是除了.NET希望您序列化的方式之外,您不能序列化
int
。即使以不同的方式序列化对象,也只能为对象内部的内容命名,而不能为对象本身命名

最后我去了谷歌,发现了这个:

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

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