Freigeben über


Aktivieren von Abfragebenachrichtigungen (ADO.NET)

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

Erstellen einer Abfrage für die Benachrichtigung

Erstellen einer Abfrage für die Benachrichtigung

Sicherheitsaspekte für Service Broker

Sicherheit und Schutz (Service Broker)

Sicherheitsaspekte 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)

Entwicklerhandbuch (Service Broker)

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.

Siehe auch

Weitere Ressourcen

Abfragebenachrichtigungen in SQL Server (ADO.NET)