我有一个手写的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是我想要避免的。