Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Anwendungen, die Abfragebenachrichtigungen nutzen, weisen eine Reihe gemeinsamer Anforderungen auf. Ihre Datenquelle muss ordnungsgemäß konfiguriert sein, um SQL-Abfragebenachrichtigungen zu unterstützen, und der Benutzer muss über die richtigen clientseitigen und serverseitigen Berechtigungen verfügen.
Um Abfragebenachrichtigungen zu verwenden, müssen Sie:
Aktivieren Sie Abfragebenachrichtigungen für Ihre Datenbank.
Stellen Sie sicher, dass die Benutzer-ID für das Herstellen der Verbindung mit der Datenbank über die erforderlichen Berechtigungen verfügt.
Verwenden Sie ein SqlCommand-Objekt, um eine gültige SELECT-Anweisung mit einem zugehörigen Benachrichtigungsobjekt (entweder SqlDependency oder SqlNotificationRequest) auszuführen.
Geben Sie den Code zur Verarbeitung der Benachrichtigung an, wenn sich die überwachten Daten ändern.
Anforderungen für Abfragebenachrichtigungen
Abfragebenachrichtigungen werden nur für SELECT-Anweisungen unterstützt, die eine Liste bestimmter Anforderungen erfüllen. Die folgende Tabelle enthält Links zur Dokumentation zu Service Broker und Abfragebenachrichtigungen in den SQL Server-Dokumenten.
SQL Server-Dokumentation
Aktivieren von Abfragebenachrichtigungen zum Ausführen von Beispielcode
Führen Sie zum Aktivieren von Service Broker in der AdventureWorks-Datenbank mit SQL Server Management Studio die folgende Transact-SQL-Anweisung aus:
ALTER DATABASE AdventureWorks SET ENABLE_BROKER;
Damit die Beispiele von Abfragebenachrichtigungen ordnungsgemäß ausgeführt werden können, müssen auf dem Datenbankserver die folgenden Transact-SQL-Anweisungen ausgeführt werden.
CREATE QUEUE ContactChangeMessages;
CREATE SERVICE ContactChangeNotifications
ON QUEUE ContactChangeMessages
([http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]);
Berechtigungen für Abfragebenachrichtigungen
Benutzer, die Befehle ausführen, für die eine Benachrichtigung gewünscht wird, müssen auf dem Server die Datenbankberechtigung SUBSCRIBE QUERY NOTIFICATIONS haben.
Clientseitiger Code, der in einer teilweise vertrauenswürdigen Situation ausgeführt wird, erfordert SqlClientPermission.
Der folgende Code erstellt ein SqlClientPermission-Objekt, wobei PermissionState auf Unrestricted festgelegt wird. Der Demand erzwingt zur Laufzeit ein SecurityException, falls allen höher im Anrufstapel befindlichen Anrufern die Berechtigung nicht erteilt wurde.
// 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
Auswählen eines Benachrichtigungsobjekts
Die Abfragebenachrichtigungs-API stellt zwei Objekte zum Verarbeiten von Benachrichtigungen zur Verfügung: SqlDependency und SqlNotificationRequest. Im Allgemeinen sollten die meisten non-ASP.NET Anwendungen das SqlDependency Objekt verwenden. ASP.NET-Anwendungen sollten die höherwertige SqlCacheDependency verwenden, die SqlDependency umfasst und ein Framework zum Verwalten der Benachrichtigungs- und Cache-Objekte bereitstellt.
Verwenden von SqlDependency
Zum Verwenden der SqlDependency muss Service Broker für die verwendete SQL Server-Datenbank aktiviert werden, und Benutzer müssen über Berechtigungen zum Erhalt von Benachrichtigungen verfügen. Service Broker-Objekte, wie z. B. die Benachrichtigungswarteschlange, sind vordefiniert.
Zusätzlich startet SqlDependency automatisch einen Arbeitsthread, um Benachrichtigungen in der Reihenfolge zu verarbeiten, in der sie in die Warteschlange gestellt werden. Außerdem wird die Service Broker-Meldung analysiert, und die Informationen werden als Ereignisargumentdaten verfügbar gemacht.
SqlDependency muss durch Aufrufen der Start-Methode initialisiert werden, um eine Abhängigkeit zur Datenbank einzurichten. Dies ist eine statische Methode, die nur einmal während der Anwendungsinitialisierung für jede erforderliche Datenbankverbindung aufgerufen werden muss. Die Stop-Methode muss beim Beenden der Anwendung für jede Abhängigkeitsverbindung, die hergestellt wurde, aufgerufen werden.
Verwenden von SqlNotificationRequest
Im Gegensatz dazu erfordert SqlNotificationRequest, dass Sie die gesamte Lauschinfrastruktur selbst implementieren. Darüber hinaus müssen alle unterstützenden Service Broker-Objekte wie warteschlangen-, Dienst- und Nachrichtentypen definiert werden, die von der Warteschlange unterstützt werden. Dieser manuelle Ansatz ist nützlich, wenn Ihre Anwendung spezielle Benachrichtigungsmeldungen oder -verhalten erfordert, oder wenn Ihre Anwendung Teil einer größeren Service Broker-Anwendung ist.