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 Service Broker a oznámení o dotazech v SQL Server Books Online.
Dokumentace k SQL Serveru
- Vytvoření dotazu pro oznámení
- Důležité informace o zabezpečení pro Service Broker
- Zabezpečení a ochrana (Service Broker)
- Důležité informace o zabezpečení pro služby oznámení
- Dotaz na oprávnění oznámení
- Mezinárodní aspekty služby Service Broker
- Aspekty návrhu řešení (Service Broker)
- Service Broker Developer InfoCenter
- Příručka pro vývojáře (Service Broker)
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]);
Dotaz na oprávnění k oznámením
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 všichni volající vyšší v zásobníku volání nepřidělili oprávnění, SecurityException to vynutí za běhu.
using Microsoft.Data.SqlClient;
using System.Security.Permissions;
class Program
{
static void Main()
{
}
// Code requires directives to
// System.Security.Permissions and
// Microsoft.Data.SqlClient
private bool CanRequestNotifications()
{
SqlClientPermission permission =
new SqlClientPermission(
PermissionState.Unrestricted);
try
{
permission.Demand();
return true;
}
catch (System.Exception)
{
return false;
}
}
}
Volba objektu oznámení
Rozhraní API pro oznámení dotazů poskytuje dva objekty pro zpracování oznámení: SqlDependency a SqlNotificationRequest.
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í.
Pracovní vlákno pro SqlDependency zpracování oznámení se automaticky spouští při jejich publikování do fronty. Parsuje také zprávu Service Broker, která zobrazuje informace jako data argumentů událostí.
SqlDependency musí být inicializován voláním Start metody k navázání závislosti na databázi.
Start je statická metoda, která musí být volána 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. Musí být také definovány všechny podpůrné objekty service brokeru, jako je fronta, služba a typy zpráv, které fronta podporuje. 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.