Implémenter des notifications d'événements

S'applique à :SQL Server

Pour implémenter une notification d'événement, vous devez créer un service cible destiné à recevoir les notifications d'événements avant de créer la notification d'événement.

Important

La sécurité des boîtes de dialogue Service Broker doit être configurée pour les notifications d'événements qui envoient des messages à un service Broker hébergé sur un serveur distant. La sécurité du dialogue doit être configurée manuellement conformément au modèle de sécurité totale.

Création du service cible

Vous n’avez pas besoin de créer un service de lancement Service Broker, car le courtier de service comprend le type de message et le contrat suivants pour les notifications d’événement :

https://schemas.microsoft.com/SQL/Notifications/PostEventNotification  

Le service cible qui reçoit les notifications d'événements doit respecter ce contrat préexistant.

Pour créer un service cible:

  1. Créez une file d'attente pour recevoir les messages.

    Remarque

    Cette file d'attente reçoit le type de message suivant : http://schemas.microsoft.com/SQL/Notifications/QueryNotification.

  2. Créez un service dans la file d'attente qui fasse référence au contrat de notification d'événement.

  3. Créez un itinéraire au niveau du service pour indiquer l’adresse à laquelle Service Broker doit expédier les messages pour le service. Si la notification d'événement a pour cible un service de la même base de données, spécifiez ADDRESS = 'LOCAL'.

    Remarque

    Le routage Service Broker détermine le service qui reçoit les messages de notification. Si la notification d’événement cible un service sur un serveur distant, des routes doivent être définies à la fois sur le serveur source et sur le serveur cible afin de garantir une communication bidirectionnelle.

L'exemple suivant illustre la création d'une file d'attente, d'un service au niveau de cette file d'attente, et d'un itinéraire au niveau du service en vue de gérer les messages relevant du contrat de notification d'événement.

CREATE QUEUE NotifyQueue ;  
GO  
CREATE SERVICE NotifyService  
ON QUEUE NotifyQueue  
(  
[http://schemas.microsoft.com/SQL/Notifications/PostEventNotification]  
);  
GO  
CREATE ROUTE NotifyRoute  
WITH SERVICE_NAME = 'NotifyService',  
ADDRESS = 'LOCAL';  
GO  

Création de la notification d'événement

Les notifications d’événements sont créées à l’aide de l’instruction Transact-SQL CREATE EVENT NOTIFICATION et supprimées à l’aide de l’instruction DROP EVENT NOTIFICATION STATEMENT. Pour modifier une notification d'événement, vous devez la supprimer et la recréer.

L'exemple suivant crée la notification d'événement CreateDatabaseNotification. Cette notification envoie un message à propos de tout événement CREATE_DATABASE qui se produit sur le serveur au service NotifyService précédemment créé.

CREATE EVENT NOTIFICATION CreateDatabaseNotification  
ON SERVER  
FOR CREATE_DATABASE  
TO SERVICE 'NotifyService', '8140a771-3c4b-4479-8ac0-81008ab17984' ;  

Attention

Les notifications d’événements traitent les événements CREATE_SCHEMA et les définitions <schema_element> des instructions CREATE SCHEMA comme des événements distincts. Par exemple, une notification d'événement est créée sur les deux événements CREATE_SCHEMA et CREATE_TABLE, et vous exécutez le traitement suivant.

CREATE SCHEMA s

CREATE TABLE t1 (col1 int)

Dans ce cas, la notification d’événement est déclenchée deux fois : une fois lorsque l’événement CREATE_SCHEMA se produit, et à nouveau lorsque l’événement CREATE_TABLE se produit. Nous vous recommandons d’éviter de créer des notifications d’événements sur les événements CREATE_SCHEMA et les <textes schema_element> de toutes les définitions correspondantes CREATE SCHEMA , ou de générer une logique dans votre application pour éviter de capturer des données d’événements indésirables.

Pour créer une notification d'événement

Pour supprimer une notification d'événement

Voir aussi

Obtenir des informations concernant les notifications d'événements
EVENTDATA (Transact-SQL)