通过WSDL生成的WCF代理类发送任意XML

时间:2011-06-22 14:40:12

标签: xml wcf interop wsdl

我有一个手写的WSDL,以及一些XSD文件。 .NET客户端需要从磁盘加载XML文档并将其内容作为SOAP消息的一部分发送。从我读过的内容来看,我认为我需要影响svcutil.exe或wsdl.exe将这部分SOAP消息视为XmlElement,而不是尝试为它创建类型。

执行此操作的正确方法是在架构中将部分消息指定为<xs:any>吗?

是否有其他方法可以让我在不使用<xs:any>的情况下正确指定架构中的消息?

我可以控制WSDL和Java服务实现,而对WCF客户端的控制稍微少一些。

以下是来自WSDL的示例消息:

<wsdl:message name="TransmitFoo">
  <wsdl:part name="body" element="someprefix:TransmitFooRequest"/>
</wsdl:message>
<wsdl:portType...>
  <wsdl:operation name="TransmitFoo">
    <wsdl:input message="tns:TransmitFoo">
  </wsdl:operation>
</wsdl:portType>

架构中TransmitFooRequest的定义如下:

<xs:element name="TransmitFooRequest">
  <xs:complexType>
    <xs:all>
      <xs:element name="someValue" type="xs:string"/>
      <xs:element ref="someprefix:bar" />
    </xs:all>
  </xs:complexType>
</xs:element>

<someprefix:bar>在架构中定义。这是从磁盘加载的部分。我希望生成的WCF代理类具有类似这样的方法签名:

TransmitFoo(String someValue, XmlElement bar)

我已经看到了一个类似要求的答案,其中WSDL是从WCF服务器生成的;我正在做相反的事情,从WSDL生成WCF客户端存根。

我意识到客户端也可以完全手动构建SOAP消息和头文件,如另一个答案,但重新实现SOAP是我想要避免的。

0 个答案:

没有答案