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
Considérations relatives à la sécurité pour Notifications Services
Considérations sur la conception de la solution (Service Broker)
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.