Sdílet prostřednictvím


Povolení oznámení dotazů

Stáhnout ADO.NET

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

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.

Další kroky