C# WCF命名空间问题
我试图复制一个web服务,到目前为止有很多问题,但这一个给了我额外的痛苦 无法更改将使用我的服务的现有应用程序,但由于我可以嗅探它发送的数据,因此我对问题有了相当好的了解 我的问题是,现有的web服务已经删除了参数上的名称空间,导致我的服务在每个参数上都没有收到任何内容 我的服务在参数标记上得到一个“urn:”: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
<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>
....