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 11-12-2020
Quim Herrera Quim Herrera is offline
Miembro
 
Registrado: may 2004
Posts: 33
Poder: 0
Quim Herrera Va por buen camino
Incluir header en webservice

Hola,

Tengo un problema al consumir un webservice de una empresa de transportes. Hay que llamar a un primer webservice para identificarte y te devuelve un id que debes mandar al segundo webservice dentro del <header> junto con los datos para dar de alta el envio.
He importado los wsdl con delphi tokyo y la cabecera está allí:
Código Delphi [-]
  ROClientIDHeader     = class;  
  .....
  
   // ************************************************************************ //
  // XML       : ROClientIDHeader, global, 
  // Namespace : http://tempuri.org/
  // Info      : Header
  // ************************************************************************ //
  ROClientIDHeader = class(TSOAPHeader)
  private
    FID: string;
    FID_Specified: boolean;
    procedure SetID(Index: Integer; const Astring: string);
    function  ID_Specified(Index: Integer): boolean;
  published
    property ID: string  Index (IS_OPTN) read FID write SetID stored ID_Specified;
  end;
  .....
  
  
procedure ROClientIDHeader.SetID(Index: Integer; const Astring: string);
begin
  FID := Astring;
  FID_Specified := True;
end;

function ROClientIDHeader.ID_Specified(Index: Integer): boolean;
begin
  Result := FID_Specified;
end;

...
  InvRegistry.RegisterHeaderClass(TypeInfo(WebServService), ROClientIDHeader, 'ROClientID', 'http://tempuri.org/');

Pero no sé como incluirla en el xml al hacer el envio.
Se está enviando:

Código:
<?xml version="1.0"?>
<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">
	<SOAP-ENV:Body>
		<WebServService___GrabaEnvio19 xmlns="http://tempuri.org/">
			<strCodAgeCargo>099999</strCodAgeCargo>
			<strCodAgeOri>099999</strCodAgeOri>
	...
			<strCodPuntoConveniencia/>
		</WebServService___GrabaEnvio19>
	</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
y deberia enviarlo con la cabecera:

Código:
<?xml version="1.0"?>
<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">
	<soap:Header>
		<ROClientIDHeader xmlns="http://tempuri.org/">
			<ID>{xxxx-xxxxx-xxxxx-xxxx}</ID>
		</ROClientIDHeader>
	</soap:Header>
	<SOAP-ENV:Body>
		<WebServService___GrabaEnvio19 xmlns="http://tempuri.org/">
			<strCodAgeCargo>099999</strCodAgeCargo>
			<strCodAgeOri>099999</strCodAgeOri>
	...
			<strCodPuntoConveniencia/>
		</WebServService___GrabaEnvio19>
	</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
¿ Alguien podria ayudarme a incluir la cabecera en el XML ?



Muchas gracias
Responder Con Cita
  #2  
Antiguo 14-12-2020
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
No comentas qué componentes estás utilizando.

En el caso de TRESTclient, puedes añadir los HAEDERS como parámetros de la cabecera.
Algo simila a esto:

Código Delphi [-]
FRestClient.AddParameter('ID', 'XXX-XXXX-XXXX-XXXX', TRESTRequestParameterKind.pkHTTPHEADER);
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 14-12-2020
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Hola

Los Header se envían antes de llamar el método que vas a consumir. En tu caso yo haría algo así, lo hago al aire, ajusta lo que se necesite:

Código Delphi [-]

var
  wsID: ID; 

begin
  //Crear servicio

  //****************
  wsID := ID.Create;
  wsID.Value := 'valor';
  (servicio as ISOAPHeader).Send(wsID);
  //****************

  //Llamar al método
end;

Saludos
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #4  
Antiguo 15-12-2020
Quim Herrera Quim Herrera is offline
Miembro
 
Registrado: may 2004
Posts: 33
Poder: 0
Quim Herrera Va por buen camino
Cita:
Empezado por egostar Ver Mensaje
Hola

Los Header se envían antes de llamar el método que vas a consumir. En tu caso yo haría algo así, lo hago al aire, ajusta lo que se necesite:

Código Delphi [-]

var
  wsID: ID; 

begin
  //Crear servicio

  //****************
  wsID := ID.Create;
  wsID.Value := 'valor';
  (servicio as ISOAPHeader).Send(wsID);
  //****************

  //Llamar al método
end;

Saludos
Hola,

La solución de egostar funciona perfectamente (añadiendo una 's' ) :

Código Delphi [-]
 ( servicio as ISOAPHeaders ).Send(wsID);

Muchísimas gracias a todos.
Saludos,
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
refrescar caché con header lucasarts_18 PHP 9 31-01-2008 20:37:26
ayuda con la funcion header() foetus PHP 1 23-01-2008 21:33:11
Totales en Group Header @-Soft Impresión 1 14-06-2006 17:11:02
Corrupt file - other than header...... seken Conexión con bases de datos 3 21-12-2005 00:20:53
Impresion de Group Header NuncaMas Impresión 1 27-02-2004 12:20:21


La franja horaria es GMT +2. Ahora son las 09:49:12.


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