Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Delphi para la web
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-05-2015
Revow Revow is offline
Miembro
NULL
 
Registrado: may 2013
Posts: 10
Poder: 0
Revow Va por buen camino
Unhappy Incluir Headers de SOAP en web services Delphi 2010

Hola club, el día de hoy tengo un problema al consumir un web service, les platico el problema.

Estoy trabajando con Delphi 2010, creando una aplicación que consume un web service, ya importe el WSDL desde la opción "WSDL Importer" de Delphi, En la definición del WSDL viene la especificación de un Header (AuthHeader) el cual ya definí con sus dos parametros username y password y hasta ahí todo bien, el problema es que vienen otras cabeceras que NO están definidas en el WSDL y que en la documentación del web service me indican que debo crear las clases para poder enviarlas desde SOAPHeaders y al no estar definidas en el WSDL por consiguiente no han sido importadas y declaradas.

Mi pregunta es ¿como debo crear estas clases tomado como base el SOAP que anexo? o ¿por donde debo buscar para poder agregar las cabeceras con sus respectivos atributos?

Anexo SOAP que ya probé y funciona sin ningún problema desde el programa SOAPUi en el podrán identificar el nodo Security y sus nodos Usernametoken y Timestamp; esas cabeceras son las que me falta definir en Delphi.

Nota modifica las URL porque aun no tengo permisos para enviar enlaces

Código PHP:
<soapenv:Envelope xmlns:soapenv="ht/schemas.xmlsoap.org/soap/envelope/" xmlns:slm="ht://schemas">
  <
soapenv:Header>
     <
slm:AuthHeader>
        <
slm:Username>userAuth</slm:Username>
        <
slm:Password>passAuth</slm:Password>
     </
slm:AuthHeader>
     <
wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="ht/docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="ht/docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
        <
wsu:Timestamp wsu:Id="TS-12">
            <
wsu:Created>2015-05-14T21:03:00.172</wsu:Created>
            <
wsu:Expires>2015-05-14T21:59:00.172</wsu:Expires>
        </
wsu:Timestamp>
        <
wsse:UsernameToken wsu:Id="UsernameToken-4">
           <
wsse:Username>usertoken</wsse:Username>
           <
wsse:Password Type="ht/docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">passtoken</wsse:Password>
           <
wsse:Nonce EncodingType="ht/docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">V33AMPBA==</wsse:Nonce>
           <
wsu:Created>2012-03-27T20:24:39.172Z</wsu:Created>
        </
wsse:UsernameToken>
     </
wsse:Security>
  </
soapenv:Header>
   <
soapenv:Body>
      <
slm:GetL>
         <
slm:Lead>9</slm:Lead>
      </
slm:GetL>
   </
soapenv:Body>
</
soapenv:Envelope
De antemano muchas gracias y saludos

Última edición por Casimiro Notevi fecha: 15-05-2015 a las 10:24:23.
Responder Con Cita
  #2  
Antiguo 15-05-2015
Avatar de TOPX
TOPX TOPX is offline
Miembro
 
Registrado: may 2008
Ubicación: Bogotá
Posts: 527
Poder: 16
TOPX Va camino a la fama
Hola,

1. Hay que ver el WSDL original (incluyendo posibles XSD anexos), porque SoapUI debe detectar esos headers de alguna parte, seguramente no los está inventando. Además, para verificar si el Wsdl Importer de otra versión de Delphi sí los tiene en cuenta.

2. Como último recurso, cuando ya se ha agotado la última esperanza y se ha renunciado a algunos principios morales/éticos, podría considerar el evento BeforeExecute del THttpRio para "maquillar" el contenido del envelope a enviar.

-
__________________
"constructive mind, destructive thoughts"
Responder Con Cita
  #3  
Antiguo 15-05-2015
Revow Revow is offline
Miembro
NULL
 
Registrado: may 2013
Posts: 10
Poder: 0
Revow Va por buen camino
Hola TOPX, gracias por la respuesta, te comento, respecto al WSDL te platico que no vienen esas cabeceras y efectivamente SOAPUi no las detecta, ese ejemplo que subí viene en la documentación de Web Service y como les comentaba ahi mismo indica que deben ser creadas esas clases.

Respecto a tu segunda opción tendrás algún ejemplo como poder hacer lo que mencionas en el evento BeforeExecute del THttpRio para "maquillar" el contenido del envelope a enviar

Saludos.
Responder Con Cita
  #4  
Antiguo 15-05-2015
Avatar de TOPX
TOPX TOPX is offline
Miembro
 
Registrado: may 2008
Ubicación: Bogotá
Posts: 527
Poder: 16
TOPX Va camino a la fama
No tengo.

Pero en la web se encuentran ejemplos fácilmente, como éstos:
-
__________________
"constructive mind, destructive thoughts"
Responder Con Cita
  #5  
Antiguo 17-05-2015
Revow Revow is offline
Miembro
NULL
 
Registrado: may 2013
Posts: 10
Poder: 0
Revow Va por buen camino
Gracias Topx, ya pude armar el SOAP con las headers en el evento HTTPRIO1BeforeExecute, en si lo que hago es armar por completo el SOAP, pero ahora me manda el error: Se requiere un certificado para completar la autenticación de cliente - URL:https://web.pp.com/SLMi5/TWebService.asmx?wsdl
Responder Con Cita
  #6  
Antiguo 19-05-2015
Avatar de TOPX
TOPX TOPX is offline
Miembro
 
Registrado: may 2008
Ubicación: Bogotá
Posts: 527
Poder: 16
TOPX Va camino a la fama
Armar todo el envelope en ese evento no es nada conveniente, empezando porque así ya no hace gracia la serialización de objetos; por eso hice énfasis en "maquillar". Espero que el tiro no le salga por la culata.

Nunca he utilizado webservices a través de HTTPS, pero leyendo en la web parece que se logra asignando un TIdSSLIOHandlerSocketOpenSSL a la propiedad IOHandler del manejador de peticiones interno en el THttpRIO ~
Cita:
Empezado por http://www.2p.cz/files/2p.cz/downloads/howto/indy_soap_web_services_in_delphi.pdf
Developer creates TIdHTTPRIO instance and initializes HTTPWebNode.HttpClient property. Using of TIdHTTPRIO is absolutely the same as THTTPRIO. For more information see Using Web Services Delphi documentation.
-
__________________
"constructive mind, destructive thoughts"
Responder Con Cita
  #7  
Antiguo 20-05-2015
Revow Revow is offline
Miembro
NULL
 
Registrado: may 2013
Posts: 10
Poder: 0
Revow Va por buen camino
Gracias, echare un vistazo y les comento como me fue
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Consulta sobre Web services y Delphi Gercondi Delphi para la web 7 22-07-2016 12:21:45
Problemas al consumir Web Services con Delphi 2010 Revow Delphi para la web 3 12-03-2015 20:47:18
Web Service SOAP con Delphi 5 socger Internet 7 26-07-2012 23:25:51
llamar un Delphi web services desde ASP SpyO_O .NET 4 25-09-2008 16:46:44
Delphi 7 SOAP y SSL iuqrul Internet 0 02-02-2006 01:09:33


La franja horaria es GMT +2. Ahora son las 13:17:11.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi