Lingua

Abilitazione delle notifiche delle query

Per usare le notifiche di query, configurare il database per supportarle e concedere all'entità di database le autorizzazioni necessarie.

Per usare le notifiche di query, è necessario:

  • Abilitare le notifiche di query per il database.

  • Verificare che l'ID utente usato per connettersi al database disponga delle autorizzazioni necessarie.

  • Utilizzare SqlCommand per eseguire un'istruzione SELECT valida con un oggetto SqlNotificationRequest o un oggetto SqlDependency associato.

  • Specificare il codice per elaborare la notifica se i dati monitorati cambiano.

Requisiti delle notifiche delle query

Le notifiche delle query sono supportate solo per SELECT istruzioni che soddisfano un elenco di requisiti specifici. Nella tabella seguente vengono forniti collegamenti alla documentazione relativa alle notifiche di Service Broker e query nella documentazione di SQL Server.

Documentazione di SQL Server

Abilitazione delle notifiche delle query per l'esecuzione di codice di esempio

Per abilitare Service Broker nel AdventureWorks database tramite SQL Server Management Studio, eseguire l'istruzione Transact-SQL seguente:

ALTER DATABASE AdventureWorks SET ENABLE_BROKER;

Affinché gli esempi di notifica delle query vengano eseguiti correttamente, è necessario eseguire le istruzioni Transact-SQL seguenti nel server di database.

CREATE QUEUE ContactChangeMessages;

CREATE SERVICE ContactChangeNotifications
  ON QUEUE ContactChangeMessages
([http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]);

Autorizzazioni per le notifiche delle query

Concedi all'entità SUBSCRIBE QUERY NOTIFICATIONS di database e a Service Broker le autorizzazioni richieste dalla configurazione della coda. Ad esempio, sostituire il segnaposto con un utente del database esistente:

GRANT SUBSCRIBE QUERY NOTIFICATIONS TO [<database_user>];

.NET moderno non supporta la Code Access Security. Non usare SqlClientPermission.Demand per autorizzare le notifiche di query. Configurare invece le autorizzazioni del database.

Scelta di un oggetto di notifica

Il supporto delle notifiche delle query fornisce due oggetti per elaborare le notifiche: SqlDependency e SqlNotificationRequest. Usare SqlDependency per ricevere eventi di modifica e invalidare la cache dell'applicazione. Usare SqlNotificationRequest quando è necessario implementare il proprio listener di notifica.

Importante

Non usare System.Data.SqlClient per i nuovi sviluppi. Usare Microsoft.Data.SqlClient invece. La classe ASP.NET Framework SqlCacheDependency richiede System.Data.SqlClient e non si integra con Microsoft.Data.SqlClient. Per le nuove applicazioni Microsoft.Data.SqlClient, gestire SqlDependency.OnChange e aggiornare la cache tramite l'API della cache dell'applicazione.

Uso di SqlDependency

Per usare SqlDependency, Service Broker deve essere abilitato per il database di SQL Server in uso e gli utenti devono disporre delle autorizzazioni per ricevere le notifiche. Gli oggetti di Service Broker, ad esempio la coda di notifica, sono predefiniti.

Inoltre, SqlDependency avvia automaticamente un thread di lavoro per elaborare le notifiche man mano che vengono pubblicate nella coda e analizza anche il messaggio di Service Broker, esponendo le informazioni come dati dell'argomento evento. SqlDependency deve essere inizializzato chiamando il Start metodo per stabilire una dipendenza al database. Si tratta di un metodo statico che deve essere chiamato una sola volta durante l'inizializzazione dell'applicazione per ogni connessione di database necessaria. Il Stop metodo deve essere chiamato alla terminazione dell'applicazione per ogni connessione di dipendenza stabilita.

Uso di SqlNotificationRequest

Al contrario, SqlNotificationRequest richiede di implementare manualmente l'intera infrastruttura di ascolto. Inoltre, è necessario definire tutti gli oggetti di Service Broker di supporto, ad esempio la coda, il servizio e i tipi di messaggio supportati dalla coda. Questo approccio manuale è utile se l'applicazione richiede speciali messaggi di notifica o comportamenti di notifica o se l'applicazione fa parte di un'applicazione Service Broker più grande.

Vedere anche