Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de changer d’annuaire.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer d’annuaire.
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ê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 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 pour les notifications de requêtes
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 fournit des liens vers la documentation sur les notifications de requêtes dans la Documentation en ligne de SQL Server.
documentation SQL Server
- Création d’une requête pour notification
- Considérations relatives à sécurité pour Service Broker
- Sécurité et protection (Service Broker)
- Considérations relatives à la sécurité pour 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
- Guide du développeur (Service Broker)
Activation des notifications de requêtes 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 des notifications de requêtes
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. Demand force une SecurityException au moment de l’exécution si tous les appelants en haut de la pile d’appels ont reçu l’autorisation.
using Microsoft.Data.SqlClient;
using System.Security.Permissions;
class Program
{
static void Main()
{
}
// Code requires directives to
// System.Security.Permissions and
// Microsoft.Data.SqlClient
private bool CanRequestNotifications()
{
SqlClientPermission permission =
new SqlClientPermission(
PermissionState.Unrestricted);
try
{
permission.Demand();
return true;
}
catch (System.Exception)
{
return false;
}
}
}
Choix d’un objet de notification
L’API des notifications de requête fournit deux objets pour traiter les notifications : SqlDependency et SqlNotificationRequest.
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 même, SqlDependency lance automatiquement un thread de travail pour traiter les notifications quand elles sont publiées dans la file d’attente. Il analyse également le message Service Broker, en exposant les informations sous forme de 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. Start est 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 nécessaire. 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. De même, tous les objets Service Broker de prise en charge, comme la file d’attente, le service et les types de message, qui sont 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.