Povolení oznámení dotazů
Aplikace, které využívají oznámení dotazů, mají společnou sadu požadavků. Váš zdroj dat musí být správně nakonfigurovaný tak, aby podporoval oznámení dotazů SQL a uživatel musí mít správná oprávnění na straně klienta a na straně serveru.
Pokud chcete používat oznámení dotazů, musíte:
Povolte oznámení dotazů pro vaši databázi.
Ujistěte se, že ID uživatele použité k připojení k databázi má potřebná oprávnění.
Pomocí objektu SqlCommand spusťte platný příkaz SELECT s přidruženým objektem oznámení – buď SqlDependency nebo SqlNotificationRequest.
Zadejte kód pro zpracování oznámení, pokud se monitorovaná data změní.
Požadavky na oznámení dotazů
Oznámení dotazů jsou podporována pouze pro příkazy SELECT, které splňují specifické požadavky. Následující tabulka obsahuje odkazy na dokumentaci ke službě Service Broker a oznámení dotazů v dokumentaci k SQL Serveru.
Dokumentace SQL Serveru
Povolení oznámení dotazů ke spuštění ukázkového kódu
Pokud chcete povolit službu Service Broker v databázi AdventureWorks pomocí aplikace SQL Server Management Studio, spusťte následující příkaz jazyka Transact-SQL:
ALTER DATABASE AdventureWorks SET ENABLE_BROKER;
Aby se ukázky oznámení dotazu správně spustily, musí se na databázovém serveru spustit následující příkazy jazyka Transact-SQL.
CREATE QUEUE ContactChangeMessages;
CREATE SERVICE ContactChangeNotifications
ON QUEUE ContactChangeMessages
([http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]);
Oprávnění k oznámením dotazů
Uživatelé, kteří spouštějí příkazy požadující oznámení, musí mít na serveru oprávnění k odběru databáze OZNÁMENÍ DOTAZŮ.
Kód na straně klienta, který běží v částečné situaci důvěryhodnosti vyžaduje SqlClientPermission.
Následující kód vytvoří SqlClientPermission objekt, který nastaví PermissionState na Unrestricted. To Demand vynutí SecurityException dobu běhu, pokud oprávnění neudělili všichni volající vyšší v zásobníku volání.
// 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;
}
}
' 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
Volba objektu oznámení
Rozhraní API pro oznámení dotazů poskytuje dva objekty pro zpracování oznámení: SqlDependency a SqlNotificationRequest. Obecně platí, že většina non-ASP.NET aplikací by měla objekt používat SqlDependency . ASP.NET aplikace by měly používat vyšší úroveň SqlCacheDependency, která zabalí SqlDependency a poskytuje architekturu pro správu oznámení a objektů mezipaměti.
Použití sqlDependency
Aby bylo možné používat SqlDependencyslužbu Service Broker, musí být povolená pro používanou databázi SQL Serveru a uživatelé musí mít oprávnění k přijímání oznámení. Předdefinované jsou objekty služby Service Broker, například fronta oznámení.
Kromě toho automaticky spustí pracovní vlákno pro SqlDependency zpracování oznámení při jejich publikování do fronty; také parsuje zprávu Service Broker a zveřejní informace jako data argumentů události. SqlDependency musí být inicializován voláním Start
metody k navázání závislosti na databázi. Jedná se o statickou metodu, která se musí volat pouze jednou během inicializace aplikace pro každé požadované připojení k databázi. Metoda Stop
by se měla volat při ukončení aplikace pro každé vytvořené připojení závislostí.
Použití sqlNotificationRequest
Naproti tomu vyžaduje, SqlNotificationRequest abyste implementovali celou infrastrukturu naslouchání sami. Kromě toho musí být definovány všechny podpůrné objekty Service Broker, jako je fronta, služba a typy zpráv podporované frontou. Tento ruční přístup je užitečný, pokud vaše aplikace vyžaduje zvláštní oznámení nebo chování oznámení nebo pokud je vaše aplikace součástí větší aplikace Service Broker.