Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-10-2015
blaiselaborde blaiselaborde is offline
Miembro
 
Registrado: nov 2006
Ubicación: Reino Unido
Posts: 39
Poder: 0
blaiselaborde Va por buen camino
DataSnap REST Error HTTP/1.1 500

Buenos días . . .

Tengo un Servidor DataSnap REST para atender solicitudes por HTTP con WebMod y atendido por un DSRESTDispacher + DSAuthenticationManager + Otros componentes básicos . . .

Recibe solicitudes desde las oficinas centrales por la Red interna y desde Móbiles y Tablets por Internet . . .

Fue creado con el asistente y lo he pulido hasta conseguir que funcione bien y sin mayores inconvenientes para un número de solicitudes HTTP bastante bajo de momento, según mi concepto (Unas 10 por minuto) . . .

El tema es que una de las API's funciona bien y sin problema si se hace una sóla solicitud, pero también tengo que enviar una Lista Diaria de Solicitudes a dicha API, las cuales se hacen desde un ciclo "While" de manera secuencial y sin descanso, tardándose en promedio 6 segundos en procesar cada una de un total de 1000 que deben enviarse . . .

Comienza trabajando bien, pero cuando entra alguna solicitud al Servidor, de otra aplicación ó de la misma, el Servidor DataSnap se bloquea y salta un error en el cliente . . . Se le dá aceptar al mensaje de Error y el proceso sigue, pero con dificultad, afectando a todas las API's, y se nota que el Servidor está pillado, hasta que se detiene por completo y hay que resetearlo.

La única solución que he encontrado para ésto, es ejecutar el Servidor como segunda opción y arrancarlo con un número de Puerto diferente, dejando dos ejecuciones del Servidor, la segunda que trabaje exclusivamente para este caso en particular.

El error que he conseguido ver es: HTTP/1.1 500 Internal Server Error

El código en el cliente es:

Código Delphi [-]
Procedure TForm.acSendExecute(Sender: TObject);
Var i: Integer;
Begin
  i := 1;
  While i <= 1000 do
    Try
      Try
        FHTTP := TIdHTTP.Create(Self);
        FHTTP.Request.ContentType     := 'text/xml; charset=utf-8';
        FHTTP.Request.ContentEncoding := 'utf-8';
        FHTTP.HTTPOptions             := [hoForceEncodeParams];
        FHTTP.Request.CharSet         := 'utf-8';

        FHTTP.Request.Authentication          := TIdBasicAuthentication.Create;
        FHTTP.Request.Authentication.Username := 'BLAISE';
        FHTTP.Request.Authentication.Password := 'PASCAL';
        FHTTP.Get('http://localhost:8080/datasnap/rest/TServerMethods1/fWGenerate/"'  + Trim(Data[i]) + '"');
      Except
        On E: EIdHTTPProtocolException do
          Begin
            Application.MessageBox(PChar('Error --> ' + Trim(Data[i]) + ' - ' + E.Message), 'Attention', MB_ICONERROR);
            Dec(i);
          End; // On
      End; // Try
    Finally
      TIdBasicAuthentication.Free;
      FHTTP.Free;
      Inc(i);
    End; // Try - While
End; // Proc

Estoy usando Delphi XE7, tiene acceso a la BBDD en Oracle 11g usando el componente DOA (Direct Oracle Access).
Gracias.
Imágenes Adjuntas
Tipo de Archivo: jpg Error HTTP-1.1 500.jpg (32,1 KB, 9 visitas)

Última edición por blaiselaborde fecha: 15-10-2015 a las 16:23:51.
Responder Con Cita
  #2  
Antiguo 16-10-2015
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 6.945
Poder: 21
jhonny Va camino a la fama
Me late que el problema debes verlo es en el server como tal, es como si el método fWGenerate no liberara memoria, conexiones o algo por el estilo.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
Responder Con Cita
  #3  
Antiguo 07-11-2015
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 6.945
Poder: 21
jhonny Va camino a la fama
¿Pudiste solucionar este problema, al depurar el server cuando recreas este error qué error te sale en el server?
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
Responder Con Cita
  #4  
Antiguo 09-11-2015
blaiselaborde blaiselaborde is offline
Miembro
 
Registrado: nov 2006
Ubicación: Reino Unido
Posts: 39
Poder: 0
blaiselaborde Va por buen camino
Hola Johnny, buenas tardes . . .

Muchas gracias por darme tu opinión al respecto y sí, todo indica que los tiros van por donde tú comentas, pero aún no he podido descubrir el fallo.

He modificado el Registro de Windows para que libere los puertos virtuales lo más pronto posible y he aumentado el número de puertos virtuales. Además he aumentado la memoria del Servidor y he reducido el acceso a la base de datos unificando las llamadas en un solo Script, además de evitar el acceso a los datos usando una Base de Datos Intermedia, ahora lo hago directamente; también he optimizando el uso del Stack para que libere todo lo que toma de élla al final de cada Invocación.

En fín, el Servidor está muy fino y se nota una mejoría sustancial con respecto al comienzo; lo que permite que los usuarios accedan al método fWGenerate sin mayores problemas. Sin embargo, no he podido conseguir que sirva indiscriminadamente. Es decir, que si le envío una tanda secuencial de llamadas al Método (no pasan de 50), como la del proceso que mencioné anteriormente, termina bloqueándose y es el error que me dá . . .

Sigo con la búsqueda y con Ensayo y Error hasta que encuentre el problema . . .

Muchas gracias por tu ayuda!!! . . .
Responder Con Cita
  #5  
Antiguo 09-11-2015
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 6.945
Poder: 21
jhonny Va camino a la fama
A mí me han pasado cosas parecidas y me he encontrado con que estoy liberando memoria donde no debería ser liberada... incluso a veces en métodos que se ejecutan despues de donde se eleva la excepción.

Y digo parecidas, porque he notado que en los servers sucede que en ocasiones uno cree que el problema es que no se está liberando algo y el asunto es lo contrario, siendo una situación donde se está liberando más de lo normal ocasioneando un AV típico.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
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
Datasnap Rest Server dison Desarrollo en Delphi para Android 3 16-05-2014 09:48:44
Consulta sobre protocolos en DataSnap (TCP/IP, HTTP) Young Providers 2 22-06-2013 01:50:36
error http/1.1 302 FOUND lhernand2 Servers 0 24-06-2011 18:39:20
Error: HTTP/1.1 404 Not found camino Internet 0 29-04-2010 03:14:40
Petición web http con error IOHandler 8051 C++ Builder 1 30-01-2010 13:47:01


La franja horaria es GMT +2. Ahora son las 02:36:07.


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