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 19-03-2008
rolandoj rolandoj is offline
Miembro
 
Registrado: abr 2007
Posts: 395
Poder: 18
rolandoj Va por buen camino
Question Como hacer llamadas concurrentes a un servidor ISAPI desde un mismo programa ?

Hola,

Podría alguién ayudarme con esta pregunta, que expresada en más detalle es :

Como se puede realizar una segunda llamada en Delphi 2007 a una librería ISAPI desde una misma aplicación cuando la primera llamada no está terminada en el servidor; pero sí en el cliente ?.

Aclaremos la idea porque aunque detalla exactamente la situación, a primera vista parece confusa.

Funcionalmente hablando, lo que me conduce a esta pregunta es un problema al querer retroalimentar al usuario, con una barra de progreso, cuando en el servidor se ejecuta una operación muy larga. Mi estrategia es que la acción en el servidor almacena, en una estructura de datos, el progreso de la operación.

Cuando la acción se inicia, la estructura se llena y se guarda en una lista (ya que podría haber varios procesos simultáneos) en la que se le asigna una llave que la identifique: Inmediatamente, se llama al método SendResponse para devolver al cliente dicha llave. Después que el servidor ejecuta SendResponse, empieza a realizar el proceso largo y periódicamente vá actualizando la estructura de progreso

Por su parte el cliente recibió la respuesta del servidot tan pronto se ejecutó SendResponse y sigue efectuando otras innstrucciones.

Como puede verse, la llamada sigue viva en el servidor mientras que el cliente ya está procesando otras instrucciones.

Hasta aquí, todo esto funciona perfectamente. Ahora viene el problema.

Lógicamente, como parte de las instrucciones en el cliente, tenemos un ciclo que efectúa llamadas al servidor que deben consultar la estructura de progreso y devolverse inmediatamente al cliente para ir mostrando dicho progreso.

Sin embargo, tan pronto se efectúa una segunda llamada, el cliente se congela y permanece en ese estado hasta que la primera llamada al servidor termina completamente.

He verificado que la segunda llamada no llega ni siquiera al beforeDispatch y por otra parte, no es problema de que el servidor esté bloqueado, lo que verifiqué con la siguiente prueba:

Justo antes de que el cliente efectuara la segunda llamada, copié el URL al portapapeles, me cambié a Internet Explorer, y procedí a ejecutar ahí ese URL. Funcionó perfectamente. Incluso, haciendo que Internet refrescara la llamada, me fué mostrando el progreso.

Mi conclusión es que de alguna forma la primera llamada se apropia del canal entre el programa cliente y el servidor, manteniendo dicha propiedad aún después de que la llamada devolvió su respuesta. Me imagino que esto se debe a la implementación Indy del protocolo http, ya que se basa en llamar al Get o al Post de TIdHTTP; pero esto, en términos de Delphi, dá por terminada la llamada tan pronto se devuelve un valor, mientras que, aparentemente, Indy, de forma oculta, se mantiene esperando datos del servidor. La pregunta entonces es :

Como puede liberarse el canal, o permitirle que reciba otros requerimientos ?.
Responder Con Cita
  #2  
Antiguo 19-03-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Así, a bote pronto, igual digo una tontería como un castillo, pero, ¿qué tal si se usa otro "IdHttp"?... Vale, vale, tampoco me he comido mucho el coco, lo reconozco...
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 27-03-2008
rolandoj rolandoj is offline
Miembro
 
Registrado: abr 2007
Posts: 395
Poder: 18
rolandoj Va por buen camino
Smile Perdona la demora. Muchas gracias. Comentarios

Cita:
Empezado por dec Ver Mensaje
Hola,

Así, a bote pronto, igual digo una tontería como un castillo, pero, ¿qué tal si se usa otro "IdHttp"?... Vale, vale, tampoco me he comido mucho el coco, lo reconozco...
Hola Dec,

Nuchísimas gracias por la ayuda y ante todo, mil disculpas por la demora. Dado lo prolongado de la misma, quiero darte una explicación :

He tenido una serie de inconvenientes, más que todo motivados en el hecho de que atiendo varios clientes al tiempo y con proyectos distintos; así que cuando estaba dedicado a este, que es con ISAPI, me interrumpieron de urgencia los de otro proyecto y solo hasta hoy pude retomar el tema.

Te agradezco inmensamente la sugerencia ya que demostró lo problemático de estar muy prejuiciado respecto a Delphi 2007. Tú sugerencia funcionó muy bien y de hecho, como dices, era una alternativa muy obvia. La razón por la que no la pensé enseguída fué la siguiente:

El aplicativo es un programa migrado desde Delphi 4 e Indy 8. En la combinación Delph4 + Indy 8, el usar un solo componente funciona perfectamente. Como yo he tenido muchos problemas con Delphi 2007 y
herramientas para él, estoy muy prevenido, por ello pensé que, o bien era un error en Delphi 2007 o en Indy 10, o en esta versión había que ajustar algún parámetro o algo por el estilo.

Bueno, una vez más muchas gracias y a la orden si por mi parte puedo ayudarte en algo
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
Como Hacer Llamadas Con Delphi 7 kurono Varios 0 16-12-2007 05:09:10
Como hacer para que un programa NO pueda ser cerrado desde el Task Manager? bustio Varios 6 25-05-2006 18:58:04
activar las tablas desde el mismo servidor david duarte Conexión con bases de datos 4 20-01-2006 16:03:32
El nuevo MSN Messenger permitirá hacer llamadas desde internet a un teléfono fijo Sasuke_Cub Noticias 0 02-09-2005 00:16:22
Programa Para llamadas a telefonicas csoriano Internet 0 16-10-2004 20:22:38


La franja horaria es GMT +2. Ahora son las 04:32:57.


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