Sdílet prostřednictvím


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.

Viz také