Мне нужно вызвать веб-службу, которая чрезвычайно требовательна (нестандартна) в отношении формата сообщений SOAP, который она выбирает для обработки. У меня нет контроля над реализацией на стороне сервера, и WSDL не доступен, все, что у меня есть, это перехваченное сообщение, прикрепленное ниже.
Моей первой мыслью было WCF + MessageContract, но что бы я ни делал с последним, я не могу получить правильный результат. Исходящие сообщения должны выглядеть так, как показано ниже. Кажется, что самая сложная часть состоит из нескольких частей тела («ProxyInfo» и «PayloadInfo» ниже). Кроме того, я также не могу заставить WCF удалить элемент «Action» из заголовка сообщения SOAP. Я понимаю, что это жизненно важный элемент для WCF, но я сомневаюсь, что смогу убедить веб-сервис принять его. Ответ, вероятно, будет другой историей, но я перейду этот мост, когда доберусь до него.
В настоящее время я рассматриваю возможность пользовательской сериализации и последующей / предварительной обработки исходящих / входящих сообщений. В худшем случае, я думаю, мне придется выполнять веб-запросы, а также сериализацию вручную. Пожалуйста, помогите, я очень отчаялся ...
<?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>