1) Sí, lo considero confiable ya que cumple correctamente el propósito para el que fue diseñado (invalidación de caché)
2) No. Es por eso que solo puede suscribirse emitiendo una consulta, esto asegura que no haya carrera entre la obtención de los datos y la notificación de nuevas actualizaciones
3) El reinicio de la base de datos (o instancia) señala todas las notificaciones de consultas pendientes con un SqlNotificationInfo
valor de Restart
. Lea cómo SqlDependency y se basa en Query Notification
para una mejor comprensión. Como SqlDependency
mantiene una conexión abierta a la base de datos todo el tiempo, SqlDependency
detectará una falta de disponibilidad de la base de datos incluso antes de cualquier notificación de consulta explícita
4) No. Más sobre esto más abajo...
5) No hay 'datos perdidos'. La notificación de consulta (y, por lo tanto, SqlDependency) nunca le notifica sobre qué los datos cambiaron Solo te notifica que cambió . Se supone que siempre debes regresar y leer todo los datos para ver qué había cambiado (y lo remito a la pregunta/respuesta n.° 2). Para empezar, una aplicación recién iniciada aún no había consultado los datos, por lo que no hay cambios que notificar. Solo después primero ha consultado los datos, ¿puede recibir una notificación?
Por la descripción de su problema, no estoy convencido de que necesite notificaciones de consulta. Me parece que desea actuar sobre cualquier cambio, sin importar cuándo sucedió, incluso si su aplicación no se estaba ejecutando . Esto ciertamente no es una invalidación de caché, es un seguimiento de cambios. Por lo tanto, debe implementar una tecnología de seguimiento de cambios, como Cambiar captura de datos o Seguimiento de cambios , los cuales son solo SQL Server 2008 y versiones posteriores (no disponible en SQL Server 2005). Con SQL Server 2005, no es raro implementar un activador y poner en cola un mensaje para Agente de servicios para manejar el mismo problema que está tratando de manejar (detectar cambios, reaccionar a cada fila de datos nuevos).