Partager via


Activation de notifications de requête

Les applications qui utilisent des notifications de requêtes ont un ensemble commun d’exigences. Votre source de données doit être correctement configurée pour prendre en charge les notifications de requête SQL et l'utilisateur doit disposer des autorisations appropriées côté client et côté serveur.

Pour utiliser des notifications de requêtes, vous devez :

  • Activer les notifications de requêtes pour votre base de données.

  • Vous assurer que l’ID utilisateur utilisé pour se connecter à la base de données dispose des autorisations nécessaires.

  • Utilisez un objet SqlCommand pour exécuter une instruction SELECT valide avec un objet de notification associé, SqlDependency ou SqlNotificationRequest.

  • Fournissez du code pour traiter la notification si les données surveillées sont modifiées.

Exigences des notifications de requête

Les notifications de requêtes sont prises en charge uniquement pour les instructions SELECT qui répondent à une liste d’exigences suivantes. Le tableau suivant présente des liens vers la documentation consacrée à Service Broker et aux notifications de requête dans la documentation de SQL Server.

Documentation SQL Server

Activation des notifications de requête pour exécuter l'exemple de code

Pour activer Service Broker sur la base de données AdventureWorks à l’aide de SQL Server Management Studio, exécutez l’instruction Transact-SQL suivante :

ALTER DATABASE AdventureWorks SET ENABLE_BROKER;

Pour que les exemples de notifications de requêtes s’exécutent correctement, les instructions Transact-SQL suivantes doivent être exécutées sur le serveur de base de données.

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

Autorisations de notifications de requête

Les utilisateurs qui exécutent des commandes exigeant une notification doivent être INSCRITS à une autorisation de base de données de NOTIFICATIONS DE REQUÊTES sur le serveur.

Le code côté client qui s’exécute dans une situation de confiance partielle requiert la SqlClientPermission.

Le code suivant permet de créer un objet SqlClientPermission qui définit PermissionState sur Unrestricted. La Demand force une SecurityException au moment de l’exécution si l’autorisation a été accordée à tous les appelants au dessus de la pile d’appels.

// 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

Sélection d'un objet notification

L’API des notifications de requête fournit deux objets pour traiter les notifications : SqlDependency et SqlNotificationRequest. En règle générale, la plupart des applications non ASP.NET doivent utiliser l'objet SqlDependency. Les applications ASP.NET doivent utiliser le SqlCacheDependency de niveau supérieur, qui enveloppe SqlDependency et fournit un cadre pour l'administration des objets notification et cache.

Utilisation de SqlDependency

Pour utiliser SqlDependency, Service Broker doit être activé pour la base de données SQL Server utilisée, et les utilisateurs doivent disposer des autorisations nécessaires pour recevoir des notifications. Les objets Service Broker, tels que la file d’attente des notifications, sont prédéfinis.

En outre, SqlDependency lance automatiquement un thread de travail pour traiter les notifications au fur et à mesure de leur publication dans la file d'attente ; il analyse également le message de Service Broker en exposant les informations comme données d'argument d'événement. SqlDependency doit être initialisé en appelant la méthode Start pour établir une dépendance à la base de données. Il s’agit d’une méthode statique qui ne doit être appelée qu’une seule fois pendant l’initialisation de l’application pour chaque connexion de base de données requise. La méthode Stop doit être appelée à la fin de l’application pour chaque connexion de dépendance effectuée.

Utilisation de SqlNotificationRequest

Par contre, SqlNotificationRequest vous demande d’implémenter vous-même l’infrastructure d’écoute complète. En outre, tous les objets Service Broker de prise en charge tels que la file d’attente, le service et les types de messages pris en charge par la file d’attente doivent être définis. Cette approche manuelle est utile si votre application requiert des messages de notification spéciaux ou des comportements de notification ou si votre application fait partie d’une plus grande application Service Broker.

Voir aussi