配置用于 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. 删除不必要的xsixsd命名空间。2. 将信封命名空间s重命名为 soapenv 。3. hsdq命名空间应在根元素中指定,并且还应通过名称而不是仅通过 url 来标识。(比较第一响应:xmlns:hsdq="http://site.gov/21398"和第二响应:xmlns="http://site.gov/21398"

我想我应该为此使用 IDispatchMessageFormatter,但对我来说似乎太复杂了,我不能在没有任何样本的情况下使用 ut。

谢谢,伙计们!

配置用于 WCF 的 XmlSerializer

我认为你做不到。前缀的命名空间顺序对服务器无关紧要。您可以编写一个自定义编码器来交换命名空间,但您应该真正检查服务器拒绝它的原因,也许它不喜欢其他东西。