Pregunta

Contexto: Desde mi interfaz web javascript, pongo en marcha una operación de larga duración (varios minutos) que se llevó a cabo en el backend .NET2.0. La llamada devuelve inmediatamente con el ID de operación, mientras que la prolongada operación de aplicación en paralelo. Las operaciones no son la CPU, pero realizan llamadas de red lentas. Una vez completada la operación, quiero ver los resultados en la interfaz web.

Pregunta:? ¿Cómo puedo notificar al cliente cuando se realiza el trabajo

Opciones he considerado:

Opción 1 : pongo en marcha la operación de larga duración de forma asíncrona directamente de JS y espero que el valor de retorno para ser el endresult en lugar de un ID de operación. Mi biblioteca de AJAX se encarga de todo, y la vida se ve muy fácil y ordenada. El problema es que en el lado del servidor el hilo es un hilo ThreadPool que ahora se bloquea por varios minutos . No necesita demasiadas peticiones en paralelo de larga duración para causar la ThreadPool a morir de hambre y llevar todo el servidor para que las rodillas, incluso si hay suficiente potencia de procesamiento.

Opción 2 : Con el ID de operación, comienzo a sondear el servidor si se ha completado la operación. Sin embargo, este es un ataque de denegación de servicio contra mi propio servidor. Además, tiene que haber una solución ajax justo a la misma. Esto no es un problema único.

¿Fue útil?

Solución

WebSync , una aplicación cometa para .NET. Debe ser exactamente lo que estás buscando.

Otros consejos

El sondeo, si se hace correctamente, no tendrá un efecto notable en la carga del servidor. Usted debe personalizar el intervalo de cubrir mejor los detalles de su trabajo del servidor - por ejemplo, no consultar al servidor durante al menos 2 minutos si se sabe que la operación suele tardar más tiempo. Incluso después de que elija un intervalo suficientemente grande - por ejemplo, 10 seg. El uso de una solicitud de servicio web o un controlador personalizado minimizará el tráfico y la hora del servidor necesaria para procesar la solicitud.

Tal vez revertir Ajax es útil si usted no tiene demasiados clientes simultáneos. Esto a veces se llama cometa.

Reverse Ajax se refiere a un patrón de diseño Ajax que utiliza conexiones HTTP de larga vida para permitir la comunicación de baja latencia entre un servidor web y un navegador. Básicamente se trata de una forma de enviar los datos del cliente al servidor y un mecanismo para empujar a los datos del servidor al navegador (lo que necesita).

http://en.wikipedia.org/wiki/Reverse_Ajax

suena como que podría satisfacer sus necesidades, acabo de utilizar y funcionó muy bien.

¿Qué hay de haber escondido (o pequeña) iframe ejecutar el Javascript de larga duración guión y hacer comprobar sólo el contenido del iframe? p.ej. la escritura escribe el ID en el iframe en su extremo.

Su opción 2 es exactamente lo que he hecho antes. Utilizar setTimeout limitar su sondeo a cada 30 segundos más o menos.

El href="http://www.icefaces.org" rel="nofollow Marco ICEfaces proporciona un AJAX Empuje tecnología. Apoyan Escalable Solicitud de procesamiento asincrónico en varios servidores de aplicaciones como embarcadero, Tomcat y Glassfish.

Si bien esto es todas las cosas de Java, puede ayudar a encontrar los términos de búsqueda adecuados para Google.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top