Erstellen von Abfragebenachrichtigungsabonnements
Das Abonnieren einer Benachrichtigung erfolgt durch Erstellen eines Befehls, Anfügen einer Benachrichtigungsanforderung an den Befehl und anschließendem Ausführen des Befehls. Abfragebenachrichtigungsabonnements müssen über eine Schnittstelle für den Datenbankzugriff erstellt werden. Transact-SQL stellt keinen Mechanismus zum Erstellen von Abfragebenachrichtigungsabonnements bereit.
Database Engine (Datenbankmodul) registriert die Benachrichtigung für die Transact-SQL-Anweisung im Befehl sofort. Für jede Anweisung, die nicht den Anforderungen für Abfragebenachrichtigungen genügt, erstellt Database Engine (Datenbankmodul) sofort eine Benachrichtigung. Für diejenigen Anweisungen, die den Anforderungen genügen, wird ein Abonnement erstellt. Sie sollten Vorsicht walten lassen, damit kein Befehl an den Server gesendet wird, der Anweisungen enthält, die die Anforderungen erfüllen, sowie Anweisungen, die die Anforderungen nicht erfüllen.
Hinweis |
|---|
Transact-SQL stellt kein Verfahren zum Abonnieren von Benachrichtigungen bereit. Die CLR-Datenzugriffsklassen, die in SQL Server gehostet werden, unterstützen keine Abfragebenachrichtigungen. |
Jedes Abfragebenachrichtigungsabonnement erstellt ein Benachrichtigungsereignis. Nachdem die Benachrichtigung eingetreten ist, entfernt SQL Server das Benachrichtigungsabonnement. Eine Anwendung, die erneut benachrichtigt werden muss, muss daher eine neue Benachrichtigung mit dem Befehl anfordern, der die geänderten Daten abruft.
Das Anfordern einer Abfragebenachrichtigung ist keine Transaktion. Wenn Sie eine Benachrichtigung für einen Befehl anfordern, registriert Database Engine (Datenbankmodul) die Benachrichtigung unabhängig davon, ob die Transaktion, die den Befehl enthält, ein Commit oder Rollback ausführt oder nicht.
Abonnements für Abfragebenachrichtigungen werden in der Datenbank gespeichert, in der die Abfrage ausgeführt wird. Die dynamische Verwaltungssicht sys.dm_qn_subscriptions zeigt Informationen zu den Abfragebenachrichtigungsabonnements an, die zurzeit aktiv sind. Die sys.internal_tables-Katalogsicht zeigt den Speicherplatz an, der von Abfragebenachrichtigungsabonnements belegt wird, die zurzeit aktiv sind.
Auswählen einer Benachrichtigungsabonnementstrategie mithilfe des verwalteten SqlClient-Anbieters
Ein Benachrichtigungsabonnement kann auf zwei Arten angefordert werden. Eine Abhängigkeit stellt eine Schnittstelle für Abfragebenachrichtigungen auf hoher Ebene bereit. Eine Anwendung erstellt einfach eine Instanz der dependency-Klasse (z. B. SqlDependency in ADO.NET), registriert einen Handler zum Empfangen des Benachrichtigungsereignisses und fügt das dependency-Objekt dann einem Abfragebefehl hinzu. Das dependency-Objekt ruft den Handler auf, wenn die Benachrichtigung eintritt.
Eine Benachrichtigungsanforderung stellt eine flexiblere Schnittstelle für Abfragebenachrichtigungen auf niedrigerer Ebene bereit. Die Anwendung erstellt ähnlich wie bei einer Abhängigkeit eine Benachrichtigungsanforderung (z. B. eine Instanz von SqlNotificationRequest in ADO.NET) und fügt die Benachrichtigungsanforderung an einen Abfragebefehl an. Im Gegensatz zu einer Abhängigkeit fordert eine Benachrichtigungsanforderung jedoch einfach ein Benachrichtigungsabonnement für die Abfrage an. Die Anwendung selbst muss Benachrichtigungsmeldungen aus der Datenbank abrufen, die Meldungen verarbeiten und entsprechend reagieren. Diese Vorgehensweise ermöglicht eine größere Flexibilität beim Anwendungsentwurf, ist jedoch etwas aufwendiger. Eine Benachrichtigungsanforderung eignet sich für Anwendungen, die Flexibilität bei der Verarbeitung von Benachrichtigungen erfordern. Eine Anwendung, die auf einer geplanten Basis ausgeführt wird, kann z B. keine Abhängigkeit verwenden, weil das dependency-Objekt gelöscht wird, wenn die Anwendung beendet wird. Bei einer Benachrichtigungsanforderung kann die Anwendung hingegen die Warteschlange beim Start überprüfen und den lokalen Datencache ggf. aktualisieren.
Anwendungen verwenden eine Abhängigkeit, wenn es sich bei der Anwendung, die die Benachrichtigungsanforderung registriert, auch um die Anwendung handelt, die die Benachrichtigung verarbeitet, wenn die Anwendung ohne Unterbrechung ausgeführt wird und wenn Verbindungen mit der Datenbank verfügbar sind, während die Anwendung ausgeführt wird. Für Anwendungen, die diese Anforderungen erfüllen, stellen Abhängigkeiten ein einfaches Verfahren zum Verwenden von Abfragebenachrichtigungen dar. Anwendungen verwenden eine Benachrichtigungsanforderung, wenn die Anwendung keine Abhängigkeit verwenden kann. In diesem Fall muss der Anwendungsentwickler eine Strategie zum Empfangen und Verarbeiten von Meldungen konzipieren, die für die Anwendung geeignet ist.
Verwenden von SOAP für Benachrichtigungen
Die systemeigene HTTP SOAP-Unterstützung umfasst Unterstützung für Abfragebenachrichtigungen. Eine SOAP-Anforderung, die den <notificationRequest>-Header enthält, erstellt ein Benachrichtigungsabonnement für eine Abfrage. Wie bei SqlNotificationRequest muss der Anforderer die Benachrichtigungsmeldungen aus der Datenbank abrufen, die Meldungen verarbeiten und entsprechend reagieren. Dieser Ansatz eignet sich gut für Webdiensteanwendungen, da keine ununterbrochene Verbindung mit SQL Server erforderlich ist.
Verwenden von SQL Server Native Client für Benachrichtigungen
Bei Anwendungen, in denen der SQL Server Server Native Client-OLE DB-Anbieter oder -ODBC-Treiber verwendet wird, können ebenfalls Benachrichtigungsanforderungen übermittelt werden. Informationen zum Verwenden von Abfragebenachrichtigungen mit SQL Server Server Native Client-Anwendungen finden Sie unter Arbeiten mit Abfragebenachrichtigungen.
Hinweis