Condividi tramite


Implementazione di notifiche degli eventi

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

Nota importanteImportante

È consigliabile configurare la protezione del dialogo di Service Broker per le notifiche degli eventi che prevedono l'invio di messaggi a Service Broker su un server remoto. La protezione del dialogo deve essere configurata manualmente in linea con il modello di protezione completa. Per ulteriori informazioni, vedere Protezione del dialogo per le notifiche degli eventi.

Creazione del servizio di destinazione

Non è necessario creare un servizio di origine di Service Broker perché Service Broker include il tipo di messaggio e di contratto seguente 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: https://schemas.microsoft.com/SQL/Notifications/QueryNotification.

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

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

    [!NOTA]

    Il routing di Service Broker determina il servizio che riceve i messaggi di notifica. Se la destinazione della notifica dell'evento è 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. Per ulteriori informazioni, vedere Routing di Service Broker.

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
(
[https://schemas.microsoft.com/SQL/Notifications/PostEventNotification]
);
GO
CREATE ROUTE NotifyRoute
WITH SERVICE_NAME = 'NotifyService',
ADDRESS = 'LOCAL';
GO

Per ulteriori informazioni sulla creazione dei servizi di destinazione di Service Broker, vedere Vantaggi della programmazione con Service Broker.

Creazione della notifica dell'evento

Le notifiche degli eventi vengono create utilizzando l'istruzione Transact-SQL CREATE EVENT NOTIFICATION e vengono eliminate utilizzando l'istruzione DROP EVENT NOTIFICATION. 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' ;
Nota di attenzioneAttenzione

Le notifiche degli eventi riconoscono gli eventi CREATE_SCHEMA e le definizioni <schema_element> delle istruzioni CREATE SCHEMA come eventi distinti. 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. È consigliabile non creare notifiche degli eventi sia negli eventi CREATE_SCHEMA che nel testo <schema_element> delle definizioni CREATE SCHEMA corrispondenti. In alternativa, implementare nell'applicazione la logica necessaria a evitare di acquisire dati per eventi non desiderati.

Per creare la notifica di un evento

Per eliminare la notifica di un evento