Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-10-2015
espinete espinete is offline
Miembro
 
Registrado: mar 2009
Posts: 238
Poder: 16
espinete Va camino a la fama
Hola

En Fiddler tengo 4 procesos. Supongo que 2 envíos y dos respuestas. No sé muy bien cómo funciona fiddler y si debo mirar en la parte superior derecha o inferior derecha de cada evento:
1.jpg

En los envíos, la pestaña Auth dice lo siguiente:
Código:
No Proxy-Authorization Header is present.

No Authorization Header is present.
De todas formas, es demasiada información para poner aquí. La he exportado y subido aquí fiddler.zip
Responder Con Cita
  #2  
Antiguo 02-11-2015
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Veo un problema en esto: ¿Es imperativo usar SOAP? Lo digo por los que no usamos (o usamos poco) el Windows. La verdad es que no sé si ese protocolo está disponible para otros sistemas operativos (no sólo Linux, también UNIX, MacOS, Solaris, BSD, OS/400, eComStation...), pero teniendo en cuenta la deriva de la administración española en lo referente a nuevas tecnologías que en realidad no son tan nuevas, no sería la primera vez que hacen algo que únicamente puede usarse desde Windows (¡Hola, DNI electrónico!).
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #3  
Antiguo 02-11-2015
espinete espinete is offline
Miembro
 
Registrado: mar 2009
Posts: 238
Poder: 16
espinete Va camino a la fama
Pues no lo sé, pero ya bastante tengo con que no lo consiga hacer desde Windows. Supongo que habilitarán más protocolos en el futuro.
Responder Con Cita
  #4  
Antiguo 02-11-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.107
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por espinete Ver Mensaje
.... Supongo que habilitarán más protocolos en el futuro.
Responder Con Cita
  #5  
Antiguo 02-11-2015
iMia iMia is offline
Miembro
 
Registrado: jul 2010
Posts: 141
Poder: 14
iMia Va por buen camino
SOAP (Simple Object Access Protocol) no es exclusivo de windows... es un protocolo de comunicaciones, para el intercambio de información... Inicialmente en xml...

Espinete... seguramente el problema lo tienes que al importar el WSDL, hay que hacer un cambio por que el server Tomcat, requiere SOAP 1.1 y no 1.2...
¿donde? os preguntareis...

Al registrar las opciones de invocación, hay que cambiar el TypeInfo, del tipo ioDocument por ioDefault
con eso queda arreglado...

Código:
//  InvRegistry.RegisterInvokeOptions(TypeInfo(xxxx), ioDocument);
  InvRegistry.RegisterInvokeOptions(TypeInfo(xxxx), ioDefault);

Saludos
Responder Con Cita
  #6  
Antiguo 03-11-2015
espinete espinete is offline
Miembro
 
Registrado: mar 2009
Posts: 238
Poder: 16
espinete Va camino a la fama
Hola, iMia...

Gracias por tu aportación... pero tras importar el WSDL, en la unit resultante (sspp.pas), no hay ninguna referencia a InvRegistry.RegisterInvokeOptions(), por lo que no puedo sustituirlo (Delphi XE7 y Delphi Seattle).

Lo más parecido está en la parte initialization de esa unit:

Código Delphi [-]
initialization
  { SSPPWebServiceProxyPort }
  InvRegistry.RegisterInterface(TypeInfo(SSPPWebServiceProxyPort), 'https://webservice.face.gob.es', 'UTF-8');
  InvRegistry.RegisterDefaultSOAPAction(TypeInfo(SSPPWebServiceProxyPort), 'https://webservice.face.gob.es#%operationName%');
  {...}
  {...}

¿Dónde exactamente debo hacer el cambio que sugieres?
Responder Con Cita
  #7  
Antiguo 03-11-2015
iMia iMia is offline
Miembro
 
Registrado: jul 2010
Posts: 141
Poder: 14
iMia Va por buen camino
Si correcto, lo acabo de importar para verlo...
y no aparece esa linea....
prueba de añadirla tal que...

Código:
 InvRegistry.RegisterInvokeOptions(TypeInfo(SSPPWebServiceProxyPort), ioDefault);
justo debajo de las dos que muestras...

Saludos...

Yo tambien en XE7...
Responder Con Cita
  #8  
Antiguo 03-11-2015
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Cita:
Empezado por iMia Ver Mensaje
SOAP (Simple Object Access Protocol) no es exclusivo de windows... es un protocolo de comunicaciones, para el intercambio de información... Inicialmente en xml...
Gracias por la info.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #9  
Antiguo 04-11-2015
iMia iMia is offline
Miembro
 
Registrado: jul 2010
Posts: 141
Poder: 14
iMia Va por buen camino
Thumbs up

bueno os informo de los progresos que estamos haciendo con espinete...

Empezado por espinete
Cita:
Creo que tengo algo...

He buscado por cómo añadir headers a la petición soap antes de hacer el envío y encontré un post en StackOverflow (en Delphi):
http://stackoverflow.com/questions/2...814937#2814937

Concretamente, en el evento BeforeExecute del componente HTTPRIO, obtenemos la petición que se va a enviar y la podemos "cambiar" sobre la marcha. Precisamente este usuario necesitaba hacer algo parecido a lo que intentamos nosotros (añadir la sección headers).

Luego he usado ese mismo evento para obtener lo que envía nuestra aplicación al webservice, en un Memo, y efectivamente, falta la sección <soapenv:Header> en el XML.

Bien

No obstante, no creo que esta sea la forma de conseguirlo. El XML podemos rellenarlo antes (incrustar la sección header con la firma, certificado, etc.). Lo que no me parece muy lógico es tener que firmar 2 veces el XML (una para firmar la factura y otra para el header), pero bueno, supongo que es normal.
Sí, aunque lo normal sería algo así...


Código Delphi [-]
var
  sphdr: TSOAPHEADERS;
  htpr: THTTPRIO;
  ws: SSPPWebServiceProxyPort;
...
begin
  sphdr := TSOAPHEADERS.create;
  htpr := THTTPRIO.create(self);
  htpr.SOAPHeaders.Send(sphdr);
  ws := GetSSPPWebServiceProxyPort(false, '', htpr);
...

Pero hay que enviar en la cabecera, todo el mensaje entero firmado...
por lo que hay que parsearlo o meterlo a mano antes de enviarlo con el evento BeforeExecute del httprio.
Es decir, en el evento, se coge el mensaje que se va a enviar (lo que hay en body, aunque contenga documentos firmados o no...), se firma, y se mente en la cabecera.
De esta forma ellos pueden comprobar que el mensaje que les llega, no está manipulado, ya que les llega sin firmar y firmado, comprueba la firma y si es correcta, al abrirlo, lo comparan con lo enviado... si es igual, está todo correcto y continúan...

Por lo que para ello hay que definir la función que capturará en evento...

Código Delphi [-]
 
  procedure HTTPRIO_BeforeExecute(const MethodName: string; SOAPRequest: TStream);

definir el httprio, asignarle el evetno y utilizarlo como vehículo del webservice...

Código Delphi [-]
var
  ws: SSPPWebServiceProxyPort;
  ...
begin
  htpr := THTTPRIO.create(self);
  htpr.OnBeforeExecute := HTTPRIO_BeforeExecute;

  ws := GetSSPPWebServiceProxyPort(false, '', htpr);
...

el evento se define tal que...

Código Delphi [-]
procedure TMDIMainForm.HTTPRIO_BeforeExecute(const MethodName: string; SOAPRequest: TStream);
var
  xmlCall: TXMLDocument;
begin
   try
      // Posicionarse al inicio del stream
      SOAPRequest.Position := 0;
      // pasar el stream a un xmlDoc... o donde se quiera...
      xmlCall.LoadFromStream(SOAPRequest);
      // Firmarlo y meterlo en la cabecera...

...
Responder Con Cita
Respuesta



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
Facturas Electronicas Argentina Chaja Varios 3 10-07-2015 19:15:05
Agregar Adendas a Facturas electronicas mexico reypcs Varios 0 20-01-2011 16:26:10
Tabla de Facturas vs Detalles de Facturas magnu9 Conexión con bases de datos 9 27-07-2007 17:27:37
Comunicaciones electronicas EDI Toni Conexión con bases de datos 0 18-04-2006 13:06:34
Campos calculados, facturas y detalles de facturas. Letty Conexión con bases de datos 7 07-11-2003 11:19:44


La franja horaria es GMT +2. Ahora son las 21:49:01.


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