Udostępnij przez


Subskrybowanie powiadomień kwerendy przy użyciu SqlNotificationRequest

Subskrybowanie powiadomienie kwerendy za pomocą SqlNotificationRequest wymaga przygotowania obiektów Service Broker, zanim aplikacja może zażądać powiadomienie.Gdy żądanie subskrypcja, aplikacja monitoruje kolejki dla powiadomienie wiadomości i odpowiednio reaguje, gdy wiadomość dociera.

SQL Server zapewnia kwerendy powiadomień przy użyciu Service Broker.Kwerenda powiadomienie wiadomość ma nazwę typu komunikatu https://schemas.microsoft.com/SQL/Notifications/QueryNotification.Service Broker sprawdza poprawność wiadomości tego typu jako VALID_XML Z KOLEKCJI SCHEMATU.Dla subskrypcji utworzone z SqlNotificationRequest, aplikacja jest odpowiedzialny za monitorowanie kolejki i przetwarza wiadomości powiadomienie.Dlatego przy użyciu SqlNotificationRequest wymaga wdrożenia aplikacji zewnętrznej.W tym temacie omówiono określone kroki wymagane do subskrybować powiadomienie kwerendy za pomocą SqlNotificationRequest.Aby uzyskać więcej informacji na temat tworzenia aplikacji do przetwarzania wiadomości powiadomienie kwerendy, zobacz Zalety programowania przy użyciuService Broker.

A SqlNotificationRequest należy określić usługa do odbierania wiadomości powiadomienie.Tworzenie usługa, należy utworzyć kolejkę, do używania usługa, a następnie utwórz usługa.Należy także utworzyć trasa do usługa lokalnej bazy danych.

Aparat baz danych Używa kontrakt https://schemas.microsoft.com/SQL/Notifications/PostQueryNotification do wysyłania wiadomości powiadomienie, więc usługa tworzenia musi zaakceptować konwersacji, które należy wykonać tej kontrakt.Poniższy przykład tworzy usługa o nazwie WebCacheNotifications używający kolejki WebCacheMessages , a następnie tworzy trasa do WebCacheNotifications usługa w lokalnej bazie danych.

USE AdventureWorks2008R2 ;

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 obiektu jest nazwa usługa Broker usługa.Powiadomienie jest tworzona jako wiadomość Service Broker.

Żądania powiadomienie musi również zawierać ciąg komunikatu żądania.Gdy Aparat baz danych tworzy powiadomienie dla tego żądania komunikat z powiadomieniem zawiera ciąg wiadomości.powiadomienie Wiadomość jest dokument XML.Ten dokument zawiera komunikat element, który posiada ciąg wiadomości zawarte w żądaniu powiadomienie.Aplikacja używa ciąg wiadomości do identyfikowania kwerendę, która odpowiada powiadomienie.

Subskrypcje powiadomień są zarządzane przy użyciu kombinacji kwerendę i wiadomości.Jeśli aplikacja żąda kolejne powiadomienie z tej samej wiadomości i tej samej kwerendy Aparat baz danych aktualizuje subskrypcję powiadomień, zamiast tworzenia nowej subskrypcja.Wiadomość może być dowolny ciąg.Jednak zauważyć, że Aparat baz danych Określa, czy dwa komunikaty są takie same.Dlatego opcje zestaw dla ciągów bazy danych, które porównuje odpowiednik w programie może być równoważne w bazie danych.Na przykład Aparat baz danych ciągi, które różnią się jedynie liczby spacji końcowych w taki sam.

Poniżej pokazano prosty program, który tworzy subskrypcja powiadomienie za pomocą 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 AdventureWorks2008R2 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=AdventureWorks2008R2;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 uruchomieniu tego kodu, SQL Server zawiera subskrypcja powiadomienie kwerendy.Subskrypcja produkuje powiadomienie, gdy jakiekolwiek dane określone w następującej kwerendzie:

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

usługa Brokerdostarcza wiadomości powiadomienie usługa WebCacheNotifications.Ponieważ ta usługa używa kolejki WebCacheMessages, wiadomości powiadomienie pojawiają się w tej kolejki.Proces powiadomienie wiadomości aplikacja monitoruje kolejki WebCacheMessages.