Estoy trabajando en un sistema que proporciona una interfaz de jabón. Uno de los sistemas que van a utilizar la interfaz está codificado en Delphi 7. El servicio web está desarrollado con WCF, enlace HTTP básico, SOAP 1.1.Delphi Soap Envelope y WCF
Si uso SOAP UI (JAVA), el servicio funciona correctamente. Pero Delphi parece hacer cosas especiales aquí;)
Esto es cómo el mensaje se ve como en SOAP de interfaz de usuario:
<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>
no soy un desarrollador de Delphi, pero desarrolló un cliente simple prueba para ver lo que está pasando incorrecto. Esto es lo que Delphi envía como un sobre de 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 genera un error que está en lengua alemana ...;)
Es wurde das endElement "cuerpo" aus espacio de nombres "http://schemas.xmlsoap.org/soap/envelope/" erwartet. Gefunden wurde "Element" NS2: GetCustomerRequest "aus Namespace" http://services.xxx.de/xxx "". Zeile 1, Posición 599.
significa algo así como
Se esperaba que el cuerpo. Pero en su lugar, se encontró el elemento "NS2: GetCustomerReques".
Ahora mi pregunta es: ¿Puedo de alguna manera cambiar la forma en que Delphi crea el sobre? ¿O las formas de hacer que WCF funcione con esos formatos de mensaje? ¡Cualquier ayuda es muy apreciada!
El problema no es la pieza NS1 NS2. El problema es que Delphi está haciendo XML estructuralmente incorrecto. Parece que el servicio web espera que GetCustomerRequest se anide dentro de GetCustomer, pero el cliente Delphi no está anidando el elemento GetCustomerRequest. Aunque no sé cómo solucionarlo. ¿Generaste el cliente Delphi usando el WSDL del servicio WCF? –