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

通过从WSDL生成的WCF代理类发送任意XML,xml,wcf,interop,wsdl,Xml,Wcf,Interop,Wsdl,我有一个手工编写的WSDL,以及一些XSD文件。NET客户端需要从磁盘加载XML文档,并将其内容作为SOAP消息的一部分发送。从我所阅读的内容来看,我认为我需要影响svcutil.exe或wsdl.exe,以便将SOAP消息的这一部分视为XmlElement,而不是尝试为其创建类型 这样做的正确方法是在模式中将部分消息指定为 有没有另一种方法可以让我在不使用的情况下在模式中正确指定消息 我可以控制WSDL和Java服务实现,但对WCF客户机的控制要少一些 以下是来自WSDL的示例消息: <

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

这样做的正确方法是在模式中将部分消息指定为

有没有另一种方法可以让我在不使用
的情况下在模式中正确指定消息

我可以控制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>
在架构中定义。这是从磁盘加载的部件。我希望生成的WCF代理类具有如下类型的方法签名:

TransmitFoo(String someValue, XmlElement bar)
我已经看到了一个类似需求的答案,其中WSDL是从WCF服务器生成的;我正在做相反的事情,从WSDL生成WCF客户机存根

我意识到客户端也可以完全手动构建SOAP消息和消息头,就像在另一个答案中一样,但我希望避免重新实现SOAP


有趣的问题!对于该方法而不是DataContractSerializer,是否为您提供了构建一组正确序列化为
条的类型所需的灵活性?如果是这样,您可能可以在代理中使用这些类型,而不是
xmlement
。类似于
TransmitFoo(stringsomevalue,Bar)
where
Bar
的东西及其成员具有适当的XML序列化属性。我想在这种情况下,我必须修改工具生成的代理类。如果可以的话,我想避免这种情况,但这可能是一种选择。但是,磁盘上的XML块是经过加密和签名的,需要做一些工作才能使其互操作,所以我不想把它扔掉,从XmlSerializer类型从头开始。@shambulator看起来像是一个定制的IClientMessageFormatter可能是一个方向:@shambulator我想你是对的,我只是不够聪明,没有意识到这一点。代理类在生成的文件中定义为分部类,因此在另一个文件中,我可以使该类实现IXmlSerializable并重写ReadXml()/WriteXml(),以执行我需要的操作。谢谢
TransmitFoo(String someValue, XmlElement bar)