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 verwenden, haben einige Anforderungen gemeinsam. Ihre Datenquelle muss richtig konfiguriert sein, um SQL-Abfragebenachrichtigungen zu unterstützen, und die Benutzer müssen über die richtigen client- und serverseitigen Berechtigungen verfügen.
Zum Verwenden von Abfragebenachrichtigungen muss Folgendes erfüllt sein:
Verwenden von SQL Server 2005 oder SQL Server 2008.
Aktivieren von Abfragebenachrichtigungen für Ihre Datenbank.
Sicherstellen, dass die zum Verbinden mit der Datenbank verwendete Benutzer-ID über die erforderlichen Berechtigungen verfügt.
Verwenden eines SqlCommand-Objekts zum Ausführen einer gültigen SELECT-Anweisung mit einem zugehörigen Benachrichtigungsobjekt, entweder SqlDependency oder SqlNotificationRequest.
Bereitstellen von Code, um die Benachrichtigung zu verarbeiten, falls sich die überwachten Daten ändern.
Anforderungen für Abfragebenachrichtigungen
Abfragebenachrichtigungen werden nur für SELECT-Anweisungen unterstützt, die bestimmte Anforderungen erfüllen. Die folgende Tabelle enthält Links zur SQL Server-Onlinedokumentation zu Service Broker und Abfragebenachrichtigungen.
SQL Server 2005-Onlinedokumentation |
SQL Server 2008-Onlinedokumentation |
|---|---|
Aktivieren von Abfragebenachrichtigungen für das 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 Abfragebenachrichtigungsbeispiele ordnungsgemäß ausgeführt werden, müssen auf dem Datenbankserver die folgenden Transact-SQL-Anweisungen ausgeführt werden:
CREATE QUEUE ContactChangeMessages;
CREATE SERVICE ContactChangeNotifications
ON QUEUE ContactChangeMessages
([https://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]);
Berechtigungen für Abfragebenachrichtigungen
Benutzer, die Befehle ausführen, mit denen Benachrichtigung angefordert werden, müssen über eine SUBSCRIBE QUERY NOTIFICATIONS-Datenbankberechtigung auf dem Server verfügen.
Clientseitiger Code, der in einem teilweise vertrauenswürdigen Kontext ausgeführt wird, erfordert die SqlClientPermission.
Im folgenden Code wird ein SqlClientPermission-Objekt erstellt, das den PermissionState auf Unrestricted setzt. Die Demand erzwingt zur Laufzeit eine SecurityException, wenn nicht allen Aufrufern, die sich in der Aufrufliste darüber befinden, die Berechtigung gewährt wurde.
' 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;
}
}
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 Nicht-ASP.NET-Anwendungen das SqlDependency-Objekt verwenden. ASP.NET-Anwendungen sollten die übergeordnete SqlCacheDependency verwenden, die die SqlDependency umschließt und einen Rahmen für die Verwaltung der Benachrichtigungs- und Zwischenspeicherobjekte bietet.
Verwenden von SqlDependency
Zum Verwenden des SqlDependency-Objekts 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, z. B. Benachrichtigungswarteschlangen, werden vordefiniert.
Außerdem wird vom SqlDependency-Objekt automatisch ein Arbeitsthread gestartet, um Benachrichtigungen zu verarbeiten, wenn sie zur Warteschlange gesendet werden. Außerdem wird die Service Broker-Meldung analysiert, und die Informationen werden als Ereignisargumentdaten verfügbar gemacht. Das SqlDependency-Objekt muss initialisiert werden, indem die Start-Methode aufgerufen wird, um eine Abhängigkeit zur Datenbank festzulegen. Dies ist eine statische Methode, die nur einmal während der Initialisierung der Anwendung für jede erforderliche Datenbankverbindung aufgerufen werden muss. Für jede Abhängigkeit, die hergestellt wurde, sollte die Stop-Methode bei Beenden der Anwendung aufgerufen werden.
Verwenden von "SqlNotificationRequest"
Im Gegensatz dazu erfordert SqlNotificationRequest das eigene Implementieren der gesamten Empfangsinfrastruktur. Zusätzlich müssen alle unterstützenden Service Broker-Objekte (z. B. die Warteschlange, der Dienst und die von der Warteschlange unterstützen Meldungstypen) definiert werden. Dieser manuelle Ansatz ist nützlich, wenn Ihre Anwendung besondere Benachrichtigungsmeldungen oder ein besonderes Benachrichtigungsverhalten erfordert oder wenn Ihre Anwendung Teil einer größeren Service Broker-Anwendung ist.