Sprache
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.
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
SELECTAnweisung 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.