Aktivieren von Abfragebenachrichtigungen (ADO.NET)

Aktualisiert: November 2007

Anwendungen, die Abfragebenachrichtigungen verwenden, haben einige Anforderungen gemeinsam. Die Datenquelle muss richtig konfiguriert sein, damit SQL-Abfragebenachrichtigungen unterstützt werden, und die Benutzer müssen über die entsprechenden Client- und Serverberechtigungen verfügen.

Zum Verwenden von Abfragebenachrichtigungen muss Folgendes erfüllt sein:

  • Verwendung 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 eine Liste spezifischer Anforderungen erfüllen. Die folgende Tabelle enthält Links zur Dokumentation von Service Broker und Abfragebenachrichtigungen in der SQL Server-Onlinedokumentation.

SQL Server 2005-Onlinedokumentation

SQL Server 2008-Onlinedokumentation

Erstellen einer Abfrage für die Benachrichtigung

Erstellen einer Abfrage für die Benachrichtigung

Sicherheitsüberlegungen für Service Broker

Sicherheit und Schutz (Service Broker)

Sicherheitsüberlegungen für Notification Services

Berechtigungen für Abfragebenachrichtigungen

Internationale Gesichtspunkte bei Service Broker

Überlegungen zu Lösungsentwürfen (Service Broker)

Service Broker (InfoCenter für Entwickler)

Developer's Guide (Service Broker)

Aktivieren von Abfragebenachrichtigungen zur Ausführung 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"

Zur Verwendung von SqlDependency muss Service Broker für die verwendete SQL Server 2005-Datenbank aktiviert sein, und Benutzer müssen über Berechtigungen zum Erhalt von Benachrichtigungen verfügen. Service Broker-Objekte, z. B. Benachrichtigungswarteschlangen, werden vordefiniert.

Zusätzlich startet SqlDependency automatisch einen Arbeitsthread, um Benachrichtigungen in der Reihenfolge zu verarbeiten, in der sie in der Warteschlange bereitgestellt 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 herzustellen. 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.

Siehe auch

Weitere Ressourcen

Abfragebenachrichtigungen in SQL Server (ADO.NET)