Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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í seznam konkrétních požadavků. Následující tabulka obsahuje odkazy na dokumentaci ke službě Service Broker a oznámení dotazů v dokumentaci k SQL Serveru.
Dokumentace k 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 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 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 situaci s částečnou důvěryhodností, vyžaduje SqlClientPermission.
Následující kód vytvoří SqlClientPermission objekt, který nastaví PermissionState na Unrestricted. Pokud volajícím výše ve stacku volání nebylo uděleno oprávnění, SecurityException to vynutí za běhu.
// 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 SqlDependency automaticky spustí pracovní vlákno pro zpracování oznámení při jejich umístění do fronty; také analyzuje zprávu Service Broker, která zpřístupňuje 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é závislostní připojení.
Použití SqlNotificationRequest
Naproti tomu SqlNotificationRequest vyžaduje, abyste celou infrastrukturu pro naslouchání implementovali 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 zvláštní chování oznámení, anebo pokud je vaše aplikace součástí větší aplikace Service Broker.