¿Cuál es la mejor manera para manejar el largo proceso que se ejecuta en un ASP.Net aplicación?

StackOverflow https://stackoverflow.com/questions/73039

  •  09-06-2019
  •  | 
  •  

Pregunta

En mi aplicación web no es un proceso en el que las consultas de los datos de toda la web, los filtros, y los guarda en la base de datos.Como se puede imaginar este proceso lleva algún tiempo.Mi solución actual es aumentar el timeout de la página y dar un AJAX barra de progreso para el usuario mientras se carga.Este es un problema por dos razones: 1) todavía tiene para largo y que el usuario debe esperar 2) a veces agota todavía.

He incursionado en threading el proceso y he leído que debo async publicar un servicio web ("dispara y olvida").

Algunas de las referencias que he leído:
- MSDN
- Dispara y Olvida

Así que mi pregunta es - ¿cuál es el mejor método?

ACTUALIZACIÓN:Después de que el usuario introduce sus datos me gustaría redirigir a la página de resultados que se actualiza a medida que el proceso se está ejecutando en segundo plano.

¿Fue útil?

Solución

Para evitar el exceso de arquitectura de la astronomía, a menudo me el uso de un iframe oculto para llamar al largo proceso en ejecución y flujo de la información de progreso.Junto con algo como jsProgressBarHandler, usted puede muy fácilmente crear grandes fuera-de-banda la indicación de progreso para las tareas más largas donde un genérico de los progresos de la animación no se corte.

En su situación específica, puede que desee utilizar un LongRunningProcess.aspx llamar por tarea, para evitar los tiempos de espera de la página.

Por ejemplo, la llamada LongRunningProcess.aspx?taskID=1 a kick off y, a continuación, al final de la tarea, emiten un

document.location = "LongRunningProcess.aspx?taskID=2".  

Hasta la saciedad.

Otros consejos

Hemos tenido un problema similar y resuelto por la partida de la obra a través de un asychronous llamada de servicio web (lo que significaba que el usuario no tiene que esperar para el trabajo de acabado).El servicio web de entonces se inició un Trabajo de SQL que realizan el trabajo y actualiza periódicamente una tabla con el estado de la obra.Nos proporciona una interfaz de usuario que permite al usuario la consulta de la tabla.

Me encontré con este problema exacto en mi último trabajo.La mejor manera que encontré fue que el fuego fuera un asychronous proceso, y notificar al usuario cuando se hace (correo electrónico o algo más).Haciéndolos esperar que a la larga va a ser problemático debido a los tiempos de espera y el desperdicio de productividad para ellos.De tener que esperar para una barra de progreso que les puede dar la falsa sensación de seguridad que se puede cancelar el proceso cuando se cierre el navegador y que puede no ser el caso, dependiendo de cómo haya configurado el sistema.

  1. ¿Cómo estás consultando los datos remoto?
  2. ¿Con qué frecuencia se cambian?
  3. Son los resultados de algo que podría ser almacenada por un período de tiempo?
  4. Cómo un periodo largo de tiempo hemos estado hablando aquí?

El "mejor método" es probable que dependerá en cierto modo de las respuestas a estas preguntas...

Usted puede crear otro hilo y almacenar una referencia al hilo en la sesión o el estado de la aplicación, dependiendo de si el hilo puede ejecutar sólo una vez por cada sitio web, o una vez por cada sesión de usuario.
Usted puede redirigir al usuario a una página donde pueda controlar los hilos de progreso.Usted puede configurar la página para actualizar automáticamente, o mostrar un botón de actualización para el usuario.
Al término de la conversación, puede enviar un correo electrónico al usuario.

Mi solución a esto, ha sido una salida de servicio de banda que hace estas y las deposita en la base de datos.

Cuando la persona pide algo la primera vez, que conseguir un poco de espera y, a continuación, se muestra arriba, pero si actualizar, de sus inmediaciones, y luego, debido a que su int db, ahora parte de la actualizan cada hora durante las siguientes 24 horas a partir de la última solicitud.

Agregar el trabajo, con sus correspondientes parámetros, para un trabajo de la cola de la tabla.A continuación, escribe un servicio de windows que recogerá estos puestos de trabajo y proceso de ellos, guardar los resultados en un lugar apropiado, y el correo electrónico al solicitante, junto con un enlace a los resultados.También es un buen toque para dar algún tipo de interfaz de usuario de modo que el usuario puede comprobar el estado de su trabajo(s).

De esta manera es mucho mejor que el lanzamiento de un hilo separado o aumentando el tiempo de espera, especialmente si su aplicación es de mayor tamaño y de las necesidades a escala, ya que simplemente se puede agregar varios servidores trabajos de proceso si es necesario.

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