Condividi tramite


Abilitazione di notifiche di query (ADO.NET)

Le applicazioni che utilizzano le notifiche di query dispongono di un set comune di requisiti. L'origine dati dell'utente deve essere configurata correttamente per supportare le notifiche di query SQL e l'utente deve disporre delle autorizzazioni corrette sia sul lato client che sul lato server.

Per utilizzare le notifiche di query è necessario:

  • Utilizzare SQL Server 2005 o SQL Server 2008.

  • Abilitare le notifiche di query per il proprio database.

  • Assicurarsi che l'identificatore utente utilizzato per connettersi al database disponga delle autorizzazioni necessarie.

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

  • Fornire il codice per eseguire la notifica se i dati monitorati vengono modificati.

Requisiti delle notifiche di query

Le notifiche di query sono supportate solo per le istruzioni SELECT che soddisfano un elenco di specifici requisiti. Nella tabella seguente sono forniti i collegamenti alla documentazione sulle notifiche di query e Service Broker disponibili nella documentazione online di SQL Server.

Documentazione online di SQL Server 2005

Documentazione online di SQL Server 2008

Creazione di una query da notificare

Creazione di una query da notificare

Considerazioni sulla sicurezza relative a Service Broker

Protezione e sicurezza (Service Broker)

Considerazioni sulla sicurezza per Notification Services

Autorizzazioni relative alle notifiche delle query

Considerazioni sulle funzionalità internazionali di Service Broker

Considerazioni sulla progettazione di soluzioni (Service Broker)

Centro informazioni per lo sviluppatore di Service Broker

Guida per gli sviluppatori di Service Broker

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

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

ALTER DATABASE AdventureWorks SET ENABLE_BROKER;

Per una corretta esecuzione degli esempi di notifica di query, nel server database devono essere eseguite le seguenti istruzioni Transact-SQL:

CREATE QUEUE ContactChangeMessages;

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

Autorizzazioni per le notifiche di query

Se si eseguono comandi che richiedono notifiche, è necessario disporre dell'autorizzazione di database SUBSCRIBE QUERY NOTIFICATIONS sul server.

Per il codice lato client che viene eseguito in una situazione di attendibilità parziale è richiesto il tipo SqlClientPermission.

Nel codice seguente viene creato un oggetto SqlClientPermission, impostando PermissionState su Unrestricted. Il metodo Demand forzerà un'eccezione SecurityException in fase di esecuzione se l'autorizzazione non è stata concessa a tutti i chiamanti della parte superiore dello stack di chiamate.

' 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
// 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;
    }
}

Scelta di un oggetto di notifica

L'API per la notifica di query fornisce due oggetti per l'elaborazione delle notifiche: SqlDependency e SqlNotificationRequest. In genere, la maggior parte delle applicazioni non ASP.NET dovrebbe utilizzare l'oggetto SqlDependency. Le applicazioni ASP.NET dovrebbero utilizzare il tipo SqlCacheDependency di livello più alto, che incapsula il tipo SqlDependency e fornisce un framework per l'amministrazione degli oggetti notifica e cache.

Utilizzo di SqlDependency

Per utilizzare il tipo SqlDependency, è necessario che Service Broker sia abilitato per il database SQL Server utilizzato e che gli utenti dispongano dell'autorizzazioni appropriate ricevere notifiche. Gli oggetti Service Broker, ad esempio la coda delle notifiche, sono predefiniti.

Inoltre, SqlDependency avvia automaticamente un thread di lavoro per elaborare le notifiche man mano che queste vengono inviate alla coda e analizza il messaggio Service Broker esponendo le informazioni come dati dell'argomento dell'evento. SqlDependency deve essere inizializzato chiamando il metodo Start per stabilire una dipendenza dal database. Si tratta di un metodo statico che deve essere chiamato una sola volta durante l'inizializzazione dell'applicazione per ciascuna connessione al database richiesta. È quindi necessario chiamare il metodo Stop al termine di un'applicazione per ogni connessione della dipendenza effettuata.

Utilizzo di SqlNotificationRequest

Al contrario, il tipo SqlNotificationRequest richiede l'implementazione dell'intera infrastruttura di ascolto da parte dell'utente. Inoltre, devono essere definiti tutti gli oggetti Service Broker di supporto quali la coda, il servizio e i tipi di messaggio supportati dalla coda. Questo approccio manuale è utile se l'applicazione richiede messaggi o comportamenti di notifica speciali oppure se l'applicazione è parte di un'applicazione Service Broker più grande.

Vedere anche

Altre risorse

Notifiche di query in SQL Server (ADO.NET)