Udostępnij przez


subskrybować powiadomień kwerendy za pomocą SqlNotificationRequest

Subskrybowanie powiadomienie kwerendy przy użyciu SqlNotificationRequest wymaga przygotowania obiektów usługa Broker zanim aplikacja może zażądać powiadomienie.Gdy zostanie wysłane żądanie subskrypcja aplikacji monitoruje kolejki dla powiadomienie wiadomości i odpowiednio reaguje, gdy nadchodzi wiadomość.

SQL Server zapewnia kwerendy powiadomień przy użyciu usługa Broker.Komunikat z powiadomieniem kwerendy ma taką nazwę, typ komunikatu https://schemas.microsoft.com/SQL/Notifications/QueryNotification. usługa Broker sprawdza poprawność wiadomości tego typu jako VALID_XML Z kolekcja SCHEMATU.Utworzone za pomocą subskrypcji SqlNotificationRequest, aplikacja jest odpowiedzialna za monitorowania kolejki i przetwarza wiadomości powiadomienie.W związku z tym za pomocą SqlNotificationRequest wymaga Implementowanie zewnętrznej aplikacji.W tym temacie opisano kolejne kroki wymagane do subskrybować powiadomienie kwerendy przy użyciu SqlNotificationRequest.Aby uzyskać więcej informacji na temat tworzenia aplikacji do procesu kwerendy powiadomienie zobacz Korzyści wynikające z programowanie z usługa Broker.

A SqlNotificationRequest musi określać usługa do odbierania wiadomości powiadomienie.Tworzenie usługa, użytkownik musi utworzyć kolejkę, do używania usługa, a następnie utwórz usługa.Trzeba także utworzyć trasa do usługa w lokalnej bazie danych.

The Database Engine uses the kontrakt https://schemas.microsoft.com/SQL/Notifications/PostQueryNotification to send powiadomienie messages, so the usługa that you create must accept conversations that follow this kontrakt. Poniższy przykład tworzy usługa o nazwie WebCacheNotifications używa kolejki WebCacheMessages , a następnie tworzy trasa do WebCacheNotifications usługa w lokalnej bazie danych.

USE AdventureWorks ;

CREATE QUEUE WebSiteCacheMessages ;

CREATE SERVICE WebCacheNotifications
  ON QUEUE WebSiteCacheMessages
  ([https://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]) ;

CREATE ROUTE
  WebCacheMessagesRoute
  WITH SERVICE_NAME = 'WebCacheNotifications',
       ADDRESS = 'LOCAL' ;

kontrakt https://schemas.microsoft.com/SQL/Notifications/PostQueryNotification Określa, że komunikaty typu https://schemas.microsoft.com/SQL/Notifications/QueryNotification mogą być przesyłane przez inicjatora rozmowy.

Nazwa usługa w SqlNotificationRequest jest nazwą usługa usługa Broker.powiadomienie Jest tworzona jako wiadomość usługa Broker.

Żądanie powiadomienie musi również zawierać ciąg komunikatu żądania.Gdy Database Engine Tworzy powiadomienie dla tego żądania komunikat z powiadomieniem zawiera ten ciąg wiadomości. powiadomienie Wiadomości jest dokumentem XML.Ten dokument zawiera Wiadomość element, który przechowuje ciąg wiadomości zawarte w żądaniu powiadomienie.Aplikacja używa ciąg wiadomości do identyfikowania kwerendę, która odpowiada na powiadomienie.

Subskrypcje powiadomienie są zarządzane przy użyciu kombinacji kwerendę i wiadomości.Jeśli aplikacja żąda innego powiadomienie tej samej wiadomości i tej samej kwerendy Database Engine aktualizuje subskrypcja powiadomienie, a nie tworzenie nowej subskrypcja. Wiadomość może być dowolny ciąg znaków.Jednak zauważyć, że Database Engine Określa, czy dwa komunikaty są takie same. Dlatego opcje ustawione dla ciągów bazy danych, które nie porównać odpowiednik w programie może być równoważna w bazie danych.Na przykład Database Engine uwzględnia ciągów, które różnią się jedynie liczby spacji końcowych były takie same.

Przykładowe poniżej przedstawiono prosty program, który tworzy subskrypcja powiadomienie przy użyciu SqlNotificationRequest:

[Język Visual Basic]

Option Strict On

Imports System
Imports System.Data
Imports System.Data.Sql
Imports System.Data.SqlClient


Namespace Microsoft.Samples.SqlServer

Module NotificationSampleMain


    Public Sub Main()

        Try

            ' Connect to the AdventureWorks database in the default instance
            ' on this server, using integrated security.  If you change this
            ' connection string, be sure to change the service string below.

            Using connection As SqlConnection = _
                new SqlConnection("database=AdventureWorks;server=.;" + _
                                  "Integrated Security=SSPI")

                connection.Open()

                ' Define the service to receive the notifications. Update this
                ' information if you change the connection string.

                Dim service As String = _
                    "WebCacheNotifications"

                Dim query As String = _
                        "SELECT prod.Name, prod.Class, " + _
                        "       prod.ProductNumber " + _
                        "FROM Production.Product as prod " + _
                        "WHERE prod.Color = 'Black' " 

                Dim command As SqlCommand = connection.CreateCommand()

                command.CommandText = query

                command.Notification = _
                    new SqlNotificationRequest(Guid.NewGuid().ToString(), _
                                               service, _
                                               Int32.MaxValue)

               Dim reader As SqlDataReader = command.ExecuteReader()

               ' Normally, an application would process the results here.

               MsgBox("Registered the notification.")
                  
            ' Notice that the connection dispose method also
            ' disposes the commands and readers created from the
            ' connection.

            End Using  ' Using connection

            

        ' For sample purposes, simply display all exceptions and exit.

        Catch e As SqlException
               MsgBox("SqlException: " + e.Message + vbCrLf  _
                                       + e.StackTrace )
        Catch e As Exception
               MsgBox("Exception: " + e.Message + vbCrLf  _
                                       + e.StackTrace )
        End Try

    End Sub ' Main

End Module 'NotificationSampleMain

End Namespace ' Microsoft.Samples.SqlServer

Po wykonaniu tego kodu, SQL Server zawiera subskrypcja powiadomienie kwerendy. subskrypcja tworzy powiadomienie, gdy następuje zmiana w jednym z danych określonych w następującej kwerendy:

SELECT prod.Name, prod.Class, prod.ProductNumber
FROM Products.Product as prod
    WHERE prod.Color = 'Black'

usługa Broker dostarcza wiadomości powiadomienie do usługa WebCacheNotifications.Ponieważ usługa ta korzysta z kolejki WebCacheMessages, komunikaty powiadamiające pojawiają się w tej kolejki.Aby przetwarzać komunikaty powiadamiające, aplikacja monitoruje kolejki WebCacheMessages.