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 14-09-2016
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Poder: 11
bucanero Va camino a la fama
Obtener los errores que devuelve un webservice

Hola buenas tardes,

Ando otra vez liado con el tema de los WebService, y en particular con el componente THTTPRIO.
Se trata de que al hacer una determinada llamada al servidor externo, si la llamada o parámetros de la misma no están bien montados, el servidor devuelve un código de error, y junto al código de error también devuelve un XML con la información detallada de dicho error.

Esta información del error con los componente TIDHTTP los puedo capturar con el siguiente código sin mayor problemas, en particular la linea en negrita es la que contiene el XML con la información del error:

Código Delphi [-]
  with IdHTTP1 do
  try
    //XML con los parametros de la consulta
    Result := Post(AURL, Stream);
  except
    on E: EIdHTTPProtocolException do begin
      MemoResult.lines.add('ErrorCode: ' + IntToStr(E.errorCode));
      MemoResult.lines.add(E.message);
      //En errorMessage devuelve un XML con informacion del error
      MemoResult.lines.add(E.ErrorMessage);
    end;
    on E: Exception do begin
      MemoResult.lines.add(E.message);
    end;
  end;

pero al hacer la misma llamada al componente THTTPRIO solo obtengo el código del error que devuelve el servidor, con el mensaje del error, pero ya no consigo obtener la información del XML que devuelve en la misma petición. ¿Se puede obtener dicha información de alguna forma?

Gracias de antemano por vuestra ayuda
Un Saludo
Responder Con Cita
  #2  
Antiguo 16-09-2016
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Poder: 11
bucanero Va camino a la fama
Tras investigar un poco el tema del envío y recepción de datos por parte de los componentes implicados en THTTPRIO, veo que lo datos que necesito obtener no llegan nunca al componente, por la forma en que este esta construido.

El componente donde se reciben los datos es THTTPReqResp y la parte del código donde se reciben dichos datos es:

Código Delphi [-]
unit Soap.SOAPHTTPTrans;

...

procedure THTTPReqResp.Receive(Context: Integer; Resp: TStream; IsGet: Boolean);
const
  MaxStatusTest = 4096;
  MaxContentType= 1024;
var
  Size, Downloaded, Status, Len, Index: DWord;
  S: string;
{$IFDEF UNICODE}
  Bytes: TBytes;
{$ENDIF}
begin
  Len := SizeOf(Status);
  Index := 0;

  { Handle error }
  if HttpQueryInfo(Pointer(Context), HTTP_QUERY_STATUS_CODE or HTTP_QUERY_FLAG_NUMBER,
    @Status, Len, Index) and (Status >= 300) and (Status <> 500) then
  begin
    Index := 0;
    Size := MaxStatusTest;
    SetLength(S, Size);
    if HttpQueryInfo(Pointer(Context), HTTP_QUERY_STATUS_TEXT, @S[Low(string)], Size, Index) then
    begin
      SetLength(S, Size div sizeof(Char));
      raise ESOAPHTTPException.CreateFmt('%s (%d) - ''%s''', [S, Status, FURL], Status);
    end;
  end;

  { Ask for Content-Type }
  Size := MaxContentType;
  SetLength(FContentType, MaxContentType);
  if (HttpQueryInfo(Pointer(Context), HTTP_QUERY_CONTENT_TYPE, @FContentType[Low(string)], Size, Index)) then
    SetLength(FContentType, Size div sizeof(Char))
  else
    // Raise GetLastError!
    Check(True);

...

end;

Al recibir la respuesta si su estado no es 200 ( y en mi caso devuelve error 400) inmediatamente salta una excepcion en siguiente linea

Código Delphi [-]
raise ESOAPHTTPException.CreateFmt('%s (%d) - ''%s''', [S, Status, FURL], Status);

sin terminar ya de ejecutar la siguiente parte del código, que es la que realmente obtiene el contenido del mensaje.

¿Hay alguna forma de sobreescribir ese método en particular sin tener que modificar todo el componente?
O alguna otra forma de obtener el RAW completo de la respuesta que devuelve el servidor.


Gracias de nuevo por su tiempo
Un saludo
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
webservice con nusoap que devuelve un array Novás PHP 1 06-05-2012 16:04:07
Errores en la creación de Cliente WebService ruedabeat2003 Internet 23 04-01-2012 16:17:01
Checkbox me devuelve -1 Kenobi Varios 3 09-05-2008 17:30:00
RecordCount me devuelve -1 mayte Conexión con bases de datos 6 11-07-2007 15:40:14
DLL que devuelve un Bitmap JAV Gráficos 2 26-03-2007 14:18:29


La franja horaria es GMT +2. Ahora son las 17:57:10.


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