Ver Mensaje Individual
  #1  
Antiguo 15-10-2015
blaiselaborde blaiselaborde is offline
Miembro
 
Registrado: nov 2006
Ubicación: Reino Unido
Posts: 40
Reputación: 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, 11 visitas)

Última edición por blaiselaborde fecha: 15-10-2015 a las 17:23:51.
Responder Con Cita