Partager via


Activation des notifications de requête (ADO.NET)

Les applications qui utilisent des notifications de requête 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ête, vous devez :

  • Utiliser SQL Server 2005 ou SQL Server 2008.

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

  • Veiller à ce que l'ID utilisateur utilisé pour se connecter à la base de données dispose des autorisations nécessaires.

  • Utiliser un objet SqlCommand pour exécuter une instruction SELECT valide avec un objet notification associé — SqlDependency ou SqlNotificationRequest.

  • Fournir le code permettant de traiter la notification en cas de modification des données surveillées.

Spécifications des notifications de requête

Les notifications de requête ne sont prises en charge que pour les instructions SELECT qui répondent à une liste de spécifications précises. Le tableau suivant présente des liens vers la documentation consacrée à Service Broker et aux notifications de requête dans la documentation en ligne de SQL Server.

Documentation en ligne de SQL Server 2005

Documentation en ligne de SQL Server 2008

Création d'une requête pour notification

Création d'une requête pour notification

Réflexions diverses sur la sécurité Service Broker

Sécurité et protection (Service Broker)

Considérations relatives à sécurité de Notifications Services

Autorisations associées aux notifications de requêtes

Considérations d'ordre international pour Service Broker

Considérations sur la conception de la solution (Service Broker)

Centre d'informations du développeur Service Broker

Developer's Guide (Service Broker) (en anglais)

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 notification de requête 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
([https://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]);

Autorisations de notifications de requête

Les utilisateurs qui exécutent des commandes nécessitant une notification doivent disposer d'une autorisation de base de données SUBSCRIBE QUERY NOTIFICATIONS sur le serveur.

Le code côté client exécuté dans une situation de confiance partielle requiert le SqlClientPermission.

Le code suivant crée un objet SqlClientPermission en affectant la valeur PermissionState à l'objet Unrestricted. La méthode Demand forcera un objet SecurityException au moment de l'exécution si l'autorisation n'a été accordée à aucun des appelants figurant plus haut dans la pile des appels.

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

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.

De plus, l'objet SqlDependency lance automatiquement un thread de travail pour traiter les notifications à mesure qu'elles sont publiées 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. L'objet SqlDependency doit être initialisé par l'appel à la méthode Start afin d'établir une dépendance par rapport à la base de données. Il s'agit d'une méthode statique qui doit être appelée une fois durant l'initialisation de l'application pour chaque connexion requise à la base de données. La méthode Stop doit être appelée à la fin de l'application pour chaque connexion de dépendance établie.

Utilisation de SqlNotificationRequest

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

Voir aussi

Autres ressources

Notifications de requête dans SQL Server (ADO.NET)