WCF / SOAP:将XML命名空间定义移动到父元素

时间:2015-02-19 09:33:47

标签: c# xml wcf soap

我使用WCF为SOAP Web服务实现客户端。代码由"添加服务参考"生成。基于WSDL文件。

SOAP请求的元素在不同的名称空间中定义。 现在,示例消息如下所示:

<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">
      <myMethod xmlns="http://example.org/xsd/requests">
         <RequestData>
            <Foo xmlns="http://example.org/xsd/elements">some</Foo>
            <Bar xmlns="http://example.org/xsd/elements">thing</Bar>
            <Baz xmlns="http://example.org/xsd/elements">content</Baz>
            <!-- .... more elements .... --> 
         </RequestData>
      </myMethod>
   </s:Body>
</s: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" 
           xmlns:a="http://example.org/xsd/requests" 
           xmlns:b="http://example.org/xsd/elements">
      <a:myMethod>
         <a:RequestData>
            <b:Foo>some</b:Foo>
            <b:Bar>thing</b:Bar>
            <b:Baz>content</b:Baz>
            <!-- .... more elements .... --> 
         </a:RequestData>
      </a:myMethod>
   </s:Body>
</s:Envelope>

(我并不十分关心哪个父元素定义了命名空间,因此可以将命名空间定义移动到EnvelopeBody或{{1对我来说没问题。)

我怎样才能做到这一点?

编辑:在第二个示例中删除了本地MyMethod定义(复制粘贴错误;))

0 个答案:

没有答案