我必须调用一个对于它选择处理的SOAP消息格式极其苛刻(非标准)的Web服务。我无法控制服务器端的实现,并且没有WSDL可用,我所拥有的是一个截取的消息,附在下面。WCF MesageContract - 自定义传出SOAP消息 - 多个机构
我的第一个想法是WCF + MessageContract,但无论我用最后一个做什么,我似乎无法得到正确的结果。传出的消息应该看起来像下面的一个。最棘手的部分似乎是多个主体内容(“ProxyInfo”和“PayloadInfo”)。此外,我也无法让WCF从SOAP消息头中移除“Action”元素。我意识到这是WCF的一个重要元素,但我怀疑我可以说服Web服务接受它。答案可能会是另外一回事,但当我接近它时,我会穿过那座桥。
目前我正在考虑自定义序列化和传出/传入邮件的后处理/预处理。在最糟糕的情况下,我想我将不得不手动执行Web请求以及序列化。请帮助,我真的很绝望......
<?xml version="1.0" encoding="UTF-8" ?>
<e:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsse="http://docs.oasisopen.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<e:Header>
<ServiceHeader xmlns="http://services/serviceheader" e:actor="http://services/loadbalancer" >
<ServiceLevel>
<Type>HIGH</Type>
<Method>FIFO</Method>
</ServiceLevel>
</ServiceHeader>
</e:Header>
<e:Body>
<ProxyInfo xmlns="http://services/proxyinfo">
<Server>
<Address>proxy1:8080</Address>
<AppId>case_delegator</AppId>
</Server>
</ProxyInfo>
<PayloadInfo xmlns="http://services/payload">
<GetConfirmation>
<CaseId>
<Id>9728DFC889874CC8B1505D91E33FCFCD</Id>
</CaseId>
</GetConfirmation>
</PayloadInfo>
</e:Body>
</e:Envelope>
请发布您尝试的消息合约,并显示生成的XML。该服务实际上是否反对Action元素?为什么?如果它不能识别它,那么它应该忽略它(除非它设置了mustUnderstand标志)。 – 2010-09-23 00:36:39