¿Cómo escribir una consulta para que se ejecute en el servidor sin que se cancele en la actualización de la página?

ajax asp.net c# dapper sql-server

Pregunta

Digamos que tengo una página web. En esa página web, tengo un botón con un oyente de evento de clic. Cuando hago clic en el botón, hace una llamada ajax (XMLHttpRequest) para actualizar algunos valores en la base de datos del lado del servidor. Mi consulta de base de datos lleva mucho tiempo en completarse y, como resultado, la respuesta también lleva mucho tiempo para volver al lado del cliente (porque el código es sincrónico). Y mientras tanto, si actualizo mi página web, la solicitud de Ajax se cancela y la consulta de actualización también se detiene.

Quiero que funcione de tal manera que realice la llamada ajax e inicie la consulta de la base de datos, pero no esperará a que se complete. E incluso si actualizo la página, la consulta de la base de datos no debería cancelarse.

En el backend (lado del servidor), tengo C # asp.net framework y sql server database.

Así que la llamada ajax va a mi código del lado del servidor que está escrito en C # y desde allí llamo a un procedimiento almacenado que contiene la consulta larga.

Quiero que la llamada ajax inicie esta consulta larga y no espere a que se complete la consulta. E incluso si actualizo la página, la consulta no se cancelará (la llamada Ajax puede cancelarse, pero la consulta no debería dejar de ejecutarse en mi servidor).

¿Cuáles son las formas disponibles en los servidores C #, dapper, asp.net y sql para implementar este escenario?

Respuesta aceptada

Si la consulta lleva mucho tiempo, tiene una tabla temporal separada para almacenar los resultados de la consulta.

Crea un procedimiento almacenado para la consulta y almacena el resultado de la consulta en la tabla temporal con el nombre de usuario como una columna separada.

Puede iniciar el procedimiento almacenado desde la interfaz de usuario y debe tener un método ajax para recuperar el último resultado de la tabla temporal con respecto al usuario particular.

Espero que hayas entendido mi explicación.


Actualizado:

Tenga una tabla separada para iniciar el procedimiento almacenado. Ahora puede usar sqldependency para ejecutar el procedimiento almacenado en segundo plano para cada notificación onChange. Por favor, vea esta respuesta para la implementación sqldependency.

espero que esto ayude



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué