3 votes

Notification de la base de données au lieu du polling. Est-ce possible?

Salut les gars,

Pour surveiller une table spécifiée sur la base de données, je la consulte toutes les quelques millisecondes (10-20 ms).

Y a-t-il une chance d'avoir une notification (éviter SqlDependency, qui dans mon scénario est trop lent) au lieu du polling?

Auriez-vous une idée?

Mon scénario est .net + Sql Server 2008

Merci!

1voto

Dumitrescu Bogdan Points 3264

Il est possible de le faire en utilisant une procédure stockée CLR qui appellera un service WCF/ou un service web. Ce n'est pas quelque chose de très difficile à faire.

Cela nécessite pratiquement 2 étapes.

  1. La modification des données. Après avoir modifié les données, vous devez envoyer les données à la procédure stockée clr. Le moyen le plus simple est de les écrire dans une ou plusieurs tables temporaires.

  2. La procédure stockée CLR. La procédure stockée clr se connectera à la base de données avec

    "context connection=true"

pour avoir accès aux procédures stockées dont vous avez besoin. Après avoir chargé les données, vous les envoyez à un serveur (WCF/service web). Dans le CLR, il vous suffit d'ajouter les références de service dont vous avez besoin. De plus, sur le serveur, vous devrez enregistrer certaines dll pour que le serveur puisse les utiliser :

system.web
smdiagnostics
system.runtime.serialization
system.identitymodel
system.identitymodel.selectors
system.messagng
system.transactions.bridge
system.servicemodel

Tout le reste est du code .NET simple pour appeler un service WCF/service web. Cette approche est très rapide et très fiable.

1voto

Sri Harsha Points 21

Pour recevoir une notification d'événement onChange en SQL, vous pouvez utiliser la fonction de Notification de requête qui est basée sur le courtier de serveur.

Les alternatives sont :

  1. Déclencheur de base de données
  2. SignalR
  3. Capture de données changeantes
  4. Suivi des modifications

0voto

ZombieSheep Points 18967

Vous pourriez utiliser la classe SqlChangeMonitor, mais cela enveloppe SqlDependency dans des scénarios de données mises en cache. Cependant, votre question est un peu vague sur pourquoi vous voulez faire cela.

0voto

mlk Points 7270

Est-ce que l'application appelante peut être modifiée pour écrire dans une file d'attente à la place?

Si ce n'est pas le cas, je suppose qu'un déclencheur sur la base de données pourrait appeler une procédure stockée CLR? Cela pourrait déclencher n'importe quel type d'événement requis.

0voto

TX_ Points 606

Je vois que vous dites avoir besoin de notifications (et SqlDependency est disponible pour cela), mais peut-être que vous n'avez pas besoin de notifications instantanées, et lire efficacement les changements périodiquement fera l'affaire. Si c'est le cas, recherchez Change Data Capture et Change Tracking.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X