配置用于WCF的XmlSerializer

时间:2012-05-09 06:45:06

标签: c# .net wcf soap xml-serialization

我们从客户端获得了一个文档,指出我们开发的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,但对我来说似乎太复杂了,我没有任何样本就无法使用。

谢谢,伙计们!

1 个答案:

答案 0 :(得分:0)

我认为你不能这样做。前缀的命名空间顺序对服务器无关紧要。您可以编写一个自定义编码器来交换命名空间,但是您应该检查服务器拒绝此操作的原因,也许它不喜欢其他内容。