我试图复制一个网络服务,到目前为止还有一些问题,但是这个问题让我更加悲痛。
现有的使用我服务的应用程序无法更改,但由于我可以嗅探它发送的数据,我对相关问题非常了解。
我的问题是现有的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>
标签移除?
答案 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消息的内容并处理此问题。这听起来很痛苦。