Comment un SqlCacheDependency savoir quand pour communiquer avec des écouteurs lorsque les données d'un changement de table?

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

Question

Je fais quelques recherches et je peux voir plus de la plomberie pour ce système mais je ne sais pas comment le serveur sql sait quand tirer un dos de message à tous les auditeurs (applications) lorsque les données d'une table change, pour exemple. Je vais commencer par expliquer ce que je comprends au point que je me perdre.

1) Service Broker doit être activé sur la base de données et certaines autorisations doivent être ensemble.

2) Le schéma de base de données devrait être déployée.

3) À l'aide aspnet_regsql.exe, activez la dépendance de cache SQL pour la base de données et tables, vous devez les données du cache pour (cette étape crée une table pour suivre les changements et les déclencheurs sur les tables aux changements de capture et incrémenter une valeur dans ce tableau) .

4) Configurer la dépendance de cache SQL dans l'application .net. Par exemple, dans une application Web, vous devez ajouter des valeurs de configuration pour le temps du scrutin, la chaîne de connexion, etc; démarrer / arrêter la dépendance dans votre Global.asax.cs, puis ajoutez les dépendances de cache sql lorsque vous ajoutez des articles à votre cache.

4a) Une partie de ce qui se passe lors du démarrage de la dépendance est que l'infrastructure est mise en place pour une file d'attente, un service et un sproc pour la communication et le nettoyage par la suite. L'utilisation de requêtes SQL Profiler, vous pouvez voir la connexion faite et un canal de communication étant mis en place sur le service de l'application pour recevoir les messages du serveur SQL.

5) Voici où je me confus. À ce stade, je l'ai mis en mémoire cache un élément dans le cache de mon application avec une référence à la dépendance de cache SQL sur la table sous-jacente pour que mon application peut recevoir des modifications dans le cas où des changements de ligne. Si je lance manuellement une mise à jour sur cette ligne, je peux voir le déclencheur d'être touché et la valeur dans le tableau de suivi étant incrémentée par 1. Cependant, je ne vois pas de communication remontant à l'application, rien sur requête SQL profileur, ni est l'élément supprimé du cache. Je ne vois pas non plus quoi que ce soit dans les files d'attente sur la base de données (ni la file d'attente d'application dynamique, ni l'erreur standard / files d'attente de transmission)

Ma question est, ce qui regarde ce tableau de suivi dans la base de données afin que les messages peuvent être envoyés sauvegarder les dépendances SQL qui sont préoccupés par les changements à ces données?

Toute aide est grandement appréciée ... Je l'ai été par le biais de nombreuses références sillonne en ligne et ne peut trouver aucune explication concrète de cela.

Était-ce utile?

La solution

Une nouvelle table est créée dans votre base de données qui est titulaire d'un nom de la table que vous voulez vérifier les mises à jour sur, et un certain nombre de changements. Chaque table que vous avez configuré pour SqlDependency a un déclencheur mis en place pour les mises à jour / inserts qui incrémente le changeid dans la nouvelle table je viens de décrire.

Votre modèle mental de la façon dont cela fonctionne est en arrière. Votre application vérifie le journal pour déterminer si une table a changé.

Donc, si la table changelog (c'est ce que je l'appelle) est suivi de deux tables dans votre base de données (produits, utilisateurs) Il ressemblera à ceci.

+Table Name + ChangeNumber +
| Product   | 1            |
+-----------+--------------+
| User      | 1            |
+-----------+--------------+

Maintenant, si vous modifiez quoi que ce soit dans l'une de ces tables, le déclencheur incrémente ChangeNumber et nous savons maintenant ils ont changé.

Il est évident qu'il ya plus à cela, mais cela est l'idée générale.

Note: Il convient de noter que vous pouvez invalider une page si une ou plusieurs tables changent, donc si votre page a la dépendance mis en place pour ces deux tables, si l'un d'eux change, il annulera la page en cache et re- cache une version mise à jour.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top