Langue

Activation des notifications de requête

Pour utiliser les notifications de requête, configurez votre base de données pour les prendre en charge et accordez au principal de la base de données les autorisations requises.

Pour utiliser les notifications de requête, 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 SqlCommand pour exécuter une instruction valide SELECT avec un objet SqlNotificationRequest ou SqlDependency associé.

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

Conditions requises pour les notifications de requête

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

Documentation SQL Server

Activation des notifications de requête pour exécuter un 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

Accordez au principal SUBSCRIBE QUERY NOTIFICATIONS de la base de données et à Service Broker les autorisations requises par votre configuration de file d’attente. Par exemple, remplacez le paramètre fictif par un utilisateur de base de données existant :

GRANT SUBSCRIBE QUERY NOTIFICATIONS TO [<database_user>];

Le .NET moderne ne prend pas en charge la sécurité d’accès du code (CAS). N’utilisez pas SqlClientPermission.Demand pour autoriser les notifications de requête ; configurez plutôt les autorisations de la base de données.

Choix d’un objet de notification

La prise en charge des notifications d’interrogation fournit deux objets pour traiter les notifications : SqlDependency et SqlNotificationRequest. Utilisez SqlDependency pour recevoir des événements de modification et invalider le cache de votre application. Utilisez SqlNotificationRequest quand vous devez implémenter votre propre écouteur de notification.

Important

N’utilisez pas System.Data.SqlClient pour le nouveau développement. Utilisez Microsoft.Data.SqlClient à la place. La classe ASP.NET Framework SqlCacheDependency nécessite System.Data.SqlClient et ne s'intègre pas à Microsoft.Data.SqlClient. Pour les nouvelles applications Microsoft.Data.SqlClient, gérez SqlDependency.OnChange et mettez à jour le cache via l'API de cache de votre application.

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 qu’elles sont publiées dans la file d’attente ; elle analyse également le message Service Broker, exposant les informations en tant que 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 doit être appelée 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