Sprache

Aktivieren von Abfragebenachrichtigungen

Um Abfragebenachrichtigungen zu verwenden, konfigurieren Sie Ihre Datenbank so, dass sie diese unterstützt, und gewähren Sie dem Datenbankprinzipal die erforderlichen Berechtigungen.

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 SqlCommand, um eine gültige SELECT Anweisung mit einem zugeordneten SqlDependency oder SqlNotificationRequest Objekt 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 die folgende Transact-SQL-Anweisung aus, um den Dienstbroker für die AdventureWorks Datenbank mithilfe von SQL Server Management Studio zu aktivieren:

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

Gewähren Sie dem Datenbankprinzipal SUBSCRIBE QUERY NOTIFICATIONS und dem Service Broker die Berechtigungen, die für Ihre Warteschlangenkonfiguration erforderlich sind. Ersetzen Sie beispielsweise den Platzhalter durch einen vorhandenen Datenbankbenutzer:

GRANT SUBSCRIBE QUERY NOTIFICATIONS TO [<database_user>];

Modernes .NET unterstützt keine Codezugriffssicherheit. Verwenden Sie SqlClientPermission.Demand nicht, um Abfragebenachrichtigungen zu autorisieren; konfigurieren Sie stattdessen Datenbankberechtigungen.

Auswählen eines Benachrichtigungsobjekts

Die Abfragebenachrichtigungsunterstützung bietet zwei Objekte zum Verarbeiten von Benachrichtigungen: SqlDependency und SqlNotificationRequest. Verwenden Sie SqlDependency, um Änderungsereignisse zu empfangen und den Cache Ihrer Anwendung ungültig zu machen. Verwenden Sie SqlNotificationRequest, wenn Sie Ihren eigenen Benachrichtigungslistener implementieren müssen.

Important

Verwenden Sie System.Data.SqlClient nicht für neue Entwicklung. Verwenden Sie stattdessen Microsoft.Data.SqlClient. Die ASP.NET Framework-Klasse SqlCacheDependency erfordert System.Data.SqlClient und lässt sich nicht mit Microsoft.Data.SqlClient integrieren. Für neue Microsoft.Data.SqlClient-Anwendungen behandeln Sie SqlDependency.OnChange und aktualisieren den Cache über die Cache-API Ihrer Anwendung.

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.

Siehe auch