Pregunta

Tengo un problema con Delphi 2007 cuando intento consumir un servicio web que configuré en Java usando JAX-WS. El servicio web se puede consumir bien desde otro programa Java y desde un sitio web C # / ASP.NET 2.0. Sin embargo, cuando intento acceder al mismo servicio utilizando el Importador WSDL en Delphi 2007 (parche 17-DE-2007), el servicio web JAX-WS no reconoce ninguno de los parámetros que le estoy pasando y los anula.

Verifiqué el mensaje SOAP que Delphi ha pasado y lo comparé con los demás, y son bastante idénticos (¡con la excepción de algunas decodificaciones de espacio de nombres insignificantes y una gran cantidad de estado de visualización del .NET!)

También he estado en la web (el enlace más útil fue http://www.bobswart.nl/Weblog/Blog.aspx?RootId=5:798 ) pero no hay alegría.

¿Alguien ha encontrado esto antes?

TIA.


¡La saga continúa!

Después de jugar con el objeto HTTPRIO para intentar que funcionara, finalmente me di por vencido e intenté una transferencia XML directa a través de HTTP. Falla.

Bien, construí un probador simple en C # y probé eso. Funciona sin problema.

Usando Fiddler para ver lo que se enviaba hacia atrás y hacia adelante, parecía que la única diferencia estaba en los espacios de nombres. Cambié los espacios de nombres en el envío XML en Delphi y ... ¡funciona!

Esta fue una muestra del XML original generado por el WSDLImporter:

<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Body>
        <version xmlns="http://path.to.service.com/">
            <input>test</input>
        </version>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

y esto es lo que realmente funciona:

<?xml version="1.0"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Body>
        <ns2:version xmlns:ns2="http://path.to.service.com/">
            <input>test</input>
        </ns2:version>
    </S:Body>
</S:Envelope>

Entonces, ahora que sé esto, ¿voy a cambiar los valores del espacio de nombres para el código WSDLImporter? No puedo ver nada obvio en las propiedades HTTPRIO.

TIA

¿Fue útil?

Solución

HA HA VIVE !!!

Básicamente tuve que sacar lo recomendado

InvRegistry.RegisterInvokeOptions(TypeInfo(ActivityService), ioDocument);

y obligarlo a usar la Sec. 5 codificación. Los espacios de nombres se generan según sea necesario y los parámetros se pasan al servicio web Java.

Correcto, necesito cerveza, mucha cerveza :)

Otros consejos

Deberías comentar esta línea en tu WSDL:

//InvRegistry.RegisterInvokeOptions(TypeInfo(WebService), ioDocument);

Eso es suficiente ... disfruta.

No es la solución para su problema, pero recientemente tuve problemas con el mismo entorno. Tuve que cambiar las opciones muchas veces hasta encontrar la forma correcta de consumir el servicio web (escrito en C #).

Verificar:

- THTTPRIO.Converter.Options
- THTTPRIO.HTTPWebNode
- THTTPRIO.HTTPWebNode.InvokeOptions

Me golpeé la cabeza contra la pared durante dos días, hasta que encontré esta publicación ... Y Cesars insinuó para comprobar THTTPRIO.Converter.Options ... Probé casi todo, el último fue configurar soXXXXHdr en verdadero - > luego sucedió algo extraño, no más nulos al servidor: O ...

No sé por qué esa configuración hace que los valores pasen, simplemente lo hace (al menos para mí).

Sería genial si alguien que realmente entiende lo que está sucediendo explicara esto.

Eliminar soSendMultiRefObj de Converter.Options ayuda

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top