Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Le applicazioni che usano le notifiche di query hanno un set comune di requisiti. L'origine dati deve essere configurata correttamente per supportare le notifiche delle query SQL e l'utente deve disporre delle autorizzazioni lato client e lato server corrette.
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 un SqlCommand oggetto per eseguire un'istruzione SELECT valida con un oggetto notifica associato, SqlDependency ovvero o SqlNotificationRequest.
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 le istruzioni SELECT 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 database AdventureWorks 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
Gli utenti che eseguono comandi che richiedono la notifica devono disporre dell'autorizzazione del database SUBSCRIBE QUERY NOTIFICATIONS nel server.
Il codice lato client eseguito in un contesto di attendibilità limitata richiede il SqlClientPermission.
Il codice seguente crea un oggetto SqlClientPermission, impostando il PermissionState su Unrestricted. Il Demand forzerà un SecurityException in fase di esecuzione se l'autorizzazione non è stata concessa a tutti i chiamanti più in alto nello stack di chiamate.
// Code requires directives to
// System.Security.Permissions and
// System.Data.SqlClient
private bool CanRequestNotifications()
{
SqlClientPermission permission =
new SqlClientPermission(
PermissionState.Unrestricted);
try
{
permission.Demand();
return true;
}
catch (System.Exception)
{
return false;
}
}
' Code requires directives to
' System.Security.Permissions and
' System.Data.SqlClient
Private Function CanRequestNotifications() As Boolean
Dim permission As New SqlClientPermission( _
PermissionState.Unrestricted)
Try
permission.Demand()
Return True
Catch ex As Exception
Return False
End Try
End Function
Scelta di un oggetto di notifica
L'API delle notifiche delle query fornisce due oggetti per elaborare le notifiche: SqlDependency e SqlNotificationRequest. In generale, la maggior parte delle applicazioni non-ASP.NET deve usare l'oggetto SqlDependency . Le applicazioni ASP.NET devono usare il livello superiore SqlCacheDependency, che esegue il wrapping di SqlDependency e fornisce un framework per amministrare gli oggetti di notifica e cache.
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.