Я работаю над системой, которая предоставляет интерфейс мыла. Одна из систем, которые будут использовать интерфейс, кодируется в Delphi 7. Веб-служба разработана с использованием WCF, базовой привязки HTTP, SOAP 1.1.
Если я использую SOAP UI (JAVA), служба работает правильно. Но Delphi, кажется, делает особые вещи здесь;)
Вот как выглядит сообщение в интерфейсе SOAP:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://services.xxx.de/xxx">
<soapenv:Header/>
<soapenv:Body>
<ser:GetCustomer>
<!--Optional:-->
<ser:GetCustomerRequest> <!-- this is a data contract -->
<ser:Id>?</ser:Id>
</ser:GetCustomerRequest>
</ser:GetCustomer>
</soapenv:Body>
</soapenv:Envelope>
Я не разработчик delphi, но я разработал простой тестовый клиент, чтобы понять, что происходит. Это то, что Delphi отправляет как конверт SOAP.
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:NS2="http://services.xxx.de/xxx">
<NS1:GetCustomer xmlns:NS1="http://services.xxx.de/xxx">
<GetCustomerRequest href="#1"/>
</NS1:GetCustomer>
<NS2:GetCustomerRequest id="1" xsi:type="NS2:GetCustomerRequest">
<Id xsi:type="xsd:int">253</Id>
</NS2:GetCustomerRequest>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
WCF выдает ошибку, которая находится на немецком языке...;)
Es wurde das Endelement "Body" aus Пространство имен " http://schemas.xmlsoap.org/soap/envelope/" erwartet. Gefunden wurde "Элемент" NS2: GetCustomerRequest "aus Namespace" http://services.xxx.de/xxx "". Zeile 1, Позиция 599.
Значит что-то вроде
Ожидалось Тело. Но вместо этого был найден элемент "NS2: GetCustomerReques".
Теперь мои вопросы: могу ли я как-то изменить способ создания Delphi конверта? Или способы заставить WCF работать с такими форматами сообщений? Любая помощь очень ценится!