我必须调用一个对它选择处理的 SOAP 消息格式要求极高(非标准)的 Web 服务。我无法控制服务器端的实现,也没有可用的 WSDL,我所拥有的只是一条截获的消息,附在下面。
我的第一个想法是 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>