Implementazione di notifiche degli eventi

Si applica a:SQL Server

Per implementare una notifica degli eventi, è necessario prima creare un servizio di destinazione che riceverà le notifiche degli eventi.

Importante

È consigliabile configurare la sicurezza del dialogo di Service Broker per le notifiche degli eventi che prevedono l'invio di messaggi a Service Broker su un server remoto. La sicurezza del dialogo deve essere configurata manualmente in base al modello di sicurezza avanzata.

Creazione del servizio di destinazione

Non è necessario creare un servizio di avvio di Service Broker, in quanto Service Broker include il seguente contratto e tipo di messaggio specifico per le notifiche degli eventi:

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

Il servizio di destinazione che riceve le notifiche degli eventi deve rispettare il contratto esistente.

Per creare un server di destinazione:

  1. Creare una coda per ricevere messaggi.

    Nota

    La coda riceve il tipo di messaggio seguente: http://schemas.microsoft.com/SQL/Notifications/QueryNotification.

  2. Creare un servizio nella coda che faccia riferimento al contratto per le notifiche degli eventi.

  3. Creare un percorso nel servizio per definire l'indirizzo a cui Service Broker invia messaggi per il servizio. Per le notifiche dell'evento la cui destinazione è rappresentata da un servizio nello stesso database, specificare ADDRESS = 'LOCAL'.

    Nota

    L’instradamento di Service Broker determina il servizio che riceve i messaggi di notifica. Se la destinazione della notifica degli eventi è rappresentata da un servizio in un server remoto, il server di origine e il server di destinazione dovranno entrambi disporre di route definite che assicurino la corretta comunicazione bidirezionale.

Nell'esempio seguente vengono creati una coda, un servizio nella coda e una route nel servizio per gestire i messaggi provenienti dal contratto per le notifiche degli eventi.

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  

Creazione della notifica degli eventi

Le notifiche degli eventi vengono create usando l'istruzione Transact-SQL CREATE EVENT NOTIFICATION e vengono eliminate usando l'istruzione DROP EVENT NOTIFICATION STATEMENT. Per modificare la notifica di un evento, è necessario eliminarla e quindi ricrearla.

Nell'esempio seguente viene creata la notifica di evento CreateDatabaseNotification. Per ogni evento CREATE_DATABASE generato nel server, questa notifica invia un messaggio al servizio NotifyService creato in precedenza.

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

Attenzione

Le notifiche degli eventi riconoscono gli eventi CREATE_SCHEMA e le definizioni <schema_element> delle istruzioni CREATE SCHEMA come eventi separati. Si supponga ad esempio di creare una notifica di evento in entrambi gli eventi CREATE_SCHEMA e CREATE_TABLE e di eseguire il batch seguente.

CREATE SCHEMA s

CREATE TABLE t1 (col1 int)

In questo caso la notifica dell'evento viene generata due volte, una prima volta quando viene generato l'evento CREATE_SCHEMA e una seconda volta quando viene generato l'evento CREATE_TABLE. È sconsigliabile la creazione di notifiche degli eventi sia negli eventi CREATE_SCHEMA che nei testi <schema_element> delle definizioni CREATE SCHEMA corrispondenti. In alternativa, generare nell'applicazione la logica per evitare l’acquisizione di dati di eventi non desiderati.

Per creare la notifica di un evento

Per eliminare la notifica di un evento

Vedere anche

Recupero di informazioni sulle notifiche degli eventi
EVENTDATA (Transact-SQL)