FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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 ?. |
|
|
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 |
|