1) Oui, je considère qu'il est fiable car il fait correctement le but pour lequel il a été conçu (invalidation du cache)
2) Non. C'est pourquoi vous ne pouvez vous abonner qu'en émettant une requête, cela garantit qu'il n'y a pas de course entre la récupération des données et la notification des nouvelles mises à jour
3) Le redémarrage de la base de données (ou de l'instance) signale toutes les notifications de requête en attente avec un SqlNotificationInfo
valeur de Restart
. Découvrez comment SqlDependency et est basé sur Query Notification
pour une meilleure compréhension. Comme SqlDependency
maintient une connexion ouverte à la base de données tout le temps, une indisponibilité de la base de données sera détectée par SqlDependency
avant même toute notification de requête explicite
4) Non. Plus d'informations à ce sujet plus bas...
5) Il n'y a pas de 'données manquantes'. La notification de requête (et donc SqlDependency) ne vous informe jamais de quoi données modifiées. Il vous avertit seulement que cela a changé . Vous êtes toujours censé revenir en arrière et lire tout les données remontent pour voir ce qui avait changé (et je vous renvoie à la question/réponse n°2). Une application nouvellement démarrée n'avait pas encore interrogé les données pour commencer, il n'y a donc aucun changement à notifier. Seulement après il a d'abord interrogé les données peut-il recevoir une notification.
D'après la description de votre problème, je ne suis pas convaincu que vous ayez besoin de notifications de requête. Il me semble que vous voulez agir sur n'importe quel changement, peu importe quand il s'est produit, même si votre application n'était pas en cours d'exécution . Ce n'est certainement pas une invalidation du cache, c'est un suivi des modifications. Par conséquent, vous devez déployer une technologie de suivi des modifications, telle que Modifier la capture de données ou Suivi des modifications , qui sont tous deux SQL Server 2008 et versions ultérieures uniquement (non disponible dans SQL Server 2005). Avec SQL Server 2005, il n'est pas rare de déployer un déclencheur et de mettre en file d'attente un message pour Courtier de services pour gérer le même problème que vous essayez de gérer (détecter les changements, réagir à chaque ligne de nouvelles données).