配置用于 WCF 的 XmlSerializer
本文关键字:XmlSerializer WCF 用于 配置 | 更新日期: 2023-09-27 18:33:31
我们从客户端得到一个文档,指定我们开发的 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
,但对我来说似乎太复杂了,我不能在没有任何样本的情况下使用 ut。
谢谢,伙计们!
我认为你做不到。前缀的命名空间顺序对服务器无关紧要。您可以编写一个自定义编码器来交换命名空间,但您应该真正检查服务器拒绝它的原因,也许它不喜欢其他东西。