2010-03-05 22 views
6

Mi aplicación ASP.NET (3.5) permite a los usuarios ejecutar consultas complejas que pueden demorar hasta 4 minutos para devolver los resultados.¿Cómo puedo cancelar una consulta de base de datos en ASP.NET cuando el navegador del usuario se desconecta?

Cuando realizo largos bucles de código, verifico ocasionalmente Response.IsClientConnected() para poder finalizar la página si el usuario cierra su navegador o hace clic en el botón de detener.

Pero al consultar SQL Server, mi código .NET está bloqueado en la llamada al GetDataReader().

Hay una manera directa de hacer GetDataReader() de forma asíncrona, así que puedo esperar para verla, pero todavía verifico, por ejemplo, cada 5-10 segundos para ver si el usuario todavía está conectado, y resguardar la consulta de la base de datos si Te has ido?

¿O hay alguna otra alternativa en la que no estoy pensando?

Respuesta

5

puede utilizar BeginExecuteReader del SqlCommand para obtener una asynch sqlreader example

100% seguro de si eso es lo que necesita?

link showing cancel

+0

Estoy pensando que esto es, gracias! Investigaré más tarde y me aseguraré de que esto se ajuste a la ley antes de aceptar. – richardtallent

+0

@richardtallent Nunca lo he usado pero el enlace adicional que agregué muestra más ejemplos y sugiere usar el método de cancelación en el objeto de comando – Pharabus

1

Sugeriría crear un objeto que tenga Start() y Wait() métodos encapsulando su consulta. Internamente use un ManualResetEvent para esperar a que termine la consulta. Utilizará la función Set() cuando se complete la consulta y el método WaitOne() o WaitOne(TimeSpan ts) para esperar en su método Wait().

Cuestiones relacionadas