我们从客户端获得了一个文档,指出我们开发的WCF服务应该返回如下响应:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:hsdq="http://site.gov/21398">
<soapenv:Header/>
<soapenv:Body>
<inf:getCarsResponse xmlns:inf="inf">
<hsdq:Message1/>
<hsdq:Message2>
<hsdq:ApplicationData>
...
</hsdq:ApplicationData>
<hsdq:ApplicationDocument/>
</hsdq:Message2>
</inf:getCarsResponse>
</soapenv:Body>
</soapenv:Envelope>
但我们服务产生的反应略有不同:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<getCarsResponse xmlns="inf">
<Message2 xmlns="http://site.gov/21398">
<ApplicationData>
...
</ApplicationData>
</Message2>
</getCarsResponse>
</s:Body>
</s:Envelope>
我知道我可以修复ApplicationDocument
部分和Header
部分的遗漏。但是,我怎样才能使我的回答与提供的一致?
我的意思是我想配置xmlserializer
是可能的:
1.删除不必要的xsi
和xsd
名称空间。
2.将信封名称空间s
重命名为soapenv
。
3. hsdq
命名空间应该在根元素中指定,并且还应该通过名称而不仅仅通过URL来标识。 (比较第一回复:xmlns:hsdq="http://site.gov/21398"
和第二回复:xmlns="http://site.gov/21398"
我想我应该使用IDispatchMessageFormatter
,但对我来说似乎太复杂了,我没有任何样本就无法使用。
谢谢,伙计们!
答案 0 :(得分:0)
我认为你不能这样做。前缀的命名空间顺序对服务器无关紧要。您可以编写一个自定义编码器来交换命名空间,但是您应该检查服务器拒绝此操作的原因,也许它不喜欢其他内容。