1

我们从客户那里得到了一份文档,指定我们开发的 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. 将信封命名空间重命名ssoapenv. 3.hsdq命名空间应该在根元素中指定,并且应该通过名称来标识,而不仅仅是通过 url。(比较第一个响应:xmlns:hsdq="http://site.gov/21398"和第二个响应:xmlns="http://site.gov/21398"

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

多谢你们!

4

1 回答 1

0

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

于 2012-05-09T15:46:27.223 回答