Udostępnij za pośrednictwem


Włączanie powiadomień o zapytaniach

Aplikacje, które korzystają z powiadomień o zapytaniach, mają wspólny zestaw wymagań. Źródło danych musi być poprawnie skonfigurowane do obsługi powiadomień dotyczących zapytań SQL, a użytkownik musi mieć odpowiednie uprawnienia po stronie klienta i po stronie serwera.

Aby korzystać z powiadomień dotyczących zapytań, musisz:

  • Włącz powiadomienia dotyczące zapytań dla bazy danych.

  • Upewnij się, że identyfikator użytkownika używany do nawiązywania połączenia z bazą danych ma niezbędne uprawnienia.

  • SqlCommand Użyj obiektu, aby wykonać prawidłową instrukcję SELECT ze skojarzonym obiektem powiadomienia — SqlDependency albo SqlNotificationRequest.

  • Podaj kod, aby przetworzyć powiadomienie, jeśli monitorowane dane zmieniają się.

Wymagania dotyczące powiadomień dotyczących zapytań

Powiadomienia o zapytaniach są obsługiwane tylko w przypadku instrukcji SELECT, które spełniają listę określonych wymagań. Poniższa tabela zawiera linki do dokumentacji usługi Service Broker i powiadomień zapytań w dokumentacji programu SQL Server.

SQL Server documentation (Dokumentacja programu SQL Server)

Włączanie powiadomień zapytań w celu uruchomienia przykładowego kodu

Aby włączyć usługę Service Broker w bazie danych AdventureWorks przy użyciu programu SQL Server Management Studio, wykonaj następującą instrukcję języka Transact-SQL:

ALTER DATABASE AdventureWorks SET ENABLE_BROKER;

Aby przykłady powiadomień zapytania działały poprawnie, na serwerze bazy danych należy wykonać następujące instrukcje języka Transact-SQL.

CREATE QUEUE ContactChangeMessages;  
  
CREATE SERVICE ContactChangeNotifications  
  ON QUEUE ContactChangeMessages  
([http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]);  

Uprawnienia powiadomień dotyczących zapytań

Użytkownicy, którzy wykonują polecenia żądające powiadomienia, muszą mieć uprawnienie do bazy danych POWIADOMIEŃ ZAPYTANIA SUBSKRYPCJI na serwerze.

Kod po stronie klienta uruchamiany w częściowej sytuacji zaufania wymaga .SqlClientPermission

Poniższy kod tworzy SqlClientPermission obiekt, ustawiając wartość na PermissionState Unrestricted. Wymusi Demand to SecurityException w czasie wykonywania, jeśli wszystkie osoby wywołujące wyższe w stosie wywołań nie otrzymały uprawnień.

// 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

Wybieranie obiektu powiadomienia

Interfejs API powiadomień o zapytaniach udostępnia dwa obiekty do przetwarzania powiadomień: SqlDependency i SqlNotificationRequest. Ogólnie rzecz biorąc, większość aplikacji non-ASP.NET powinna używać SqlDependency obiektu . ASP.NET aplikacje powinny używać wyższego poziomu SqlCacheDependency, który opakowuje SqlDependency i udostępnia platformę do administrowania obiektami powiadomień i pamięci podręcznej.

Korzystanie z programu SqlDependency

Aby można było używać SqlDependencyprogramu , należy włączyć usługę Service Broker dla używanej bazy danych programu SQL Server, a użytkownicy muszą mieć uprawnienia do odbierania powiadomień. Obiekty usługi Service Broker, takie jak kolejka powiadomień, są wstępnie zdefiniowane.

Ponadto SqlDependency automatycznie uruchamia wątek procesu roboczego w celu przetwarzania powiadomień w miarę ich opublikowania w kolejce. Analizuje również komunikat Service Broker, ujawniając informacje jako dane argumentu zdarzenia. SqlDependency należy zainicjować przez wywołanie Start metody w celu ustanowienia zależności z bazą danych. Jest to metoda statyczna, która musi być wywoływana tylko raz podczas inicjowania aplikacji dla każdego wymaganego połączenia z bazą danych. Metoda powinna być wywoływana Stop po zakończeniu działania aplikacji dla każdego połączenia zależności, które zostało wykonane.

Korzystanie z polecenia SqlNotificationRequest

Z kolei SqlNotificationRequest wymaga samodzielnego zaimplementowania całej infrastruktury nasłuchiwania. Ponadto należy zdefiniować wszystkie pomocnicze obiekty usługi Service Broker, takie jak kolejka, usługa i typy komunikatów obsługiwane przez kolejkę. Takie podejście ręczne jest przydatne, jeśli aplikacja wymaga specjalnych komunikatów powiadomień lub zachowań powiadomień lub jeśli aplikacja jest częścią większej aplikacji Service Broker.

Zobacz też