Udostępnij za pośrednictwem


Lekcja 4: Począwszy od konwersacji i przekazywania wiadomości

W tej lekcji użytkownik zapozna rozpocząć konwersację obejmuje dwie bazy danych w tym samym wystąpienie z Aparat baz danych.Będzie także dowiedzieć się, jak zakończenie cyklu wiadomości proste żądanie odpowiedź, a następnie zakończyć konwersację.

Procedury

Przełącz się do bazy danych InitiatorDB

  • Skopiuj i wklej następujący kod w oknie Edytora kwerend.Następnie uruchom go przełączyć kontekst do InitiatorDB bazy danych, w którym będzie inicjować konwersację.

    USE InitiatorDB;
    GO
    

Rozpoczynanie konwersacji i wysłać wiadomość żądania

  • Skopiuj i wklej następujący kod w oknie Edytora kwerend.Następnie uruchom, aby rozpocząć konwersację i wysłać żądanie //TgtDB/2DBSample/TargetService w TargetDB.Kod musi być uruchamiane w jednym blok, ponieważ zmienna jest używana do przekazania uchwyt okna dialogowego z okna DIALOGOWEGO rozpoczęcia WYSYŁANIA instrukcja.Partia uruchamia instrukcja BEGIN okno DIALOGOWE rozpoczęcia konwersacji i budowanie komunikat żądania.Następnie użyto uchwyt okna dialogowego w instrukcja SEND do wysłania żądania w tej konwersacji.Ostatniej instrukcja SELECT wyświetla tekst komunikatu, który został wysłany.

    DECLARE @InitDlgHandle UNIQUEIDENTIFIER;
    DECLARE @RequestMsg NVARCHAR(100);
    
    BEGIN TRANSACTION;
    
    BEGIN DIALOG @InitDlgHandle
         FROM SERVICE [//InitDB/2DBSample/InitiatorService]
         TO SERVICE N'//TgtDB/2DBSample/TargetService'
         ON CONTRACT [//BothDB/2DBSample/SimpleContract]
         WITH
             ENCRYPTION = OFF;
    
    SELECT @RequestMsg =
       N'<RequestMsg>Message for Target service.</RequestMsg>';
    
    SEND ON CONVERSATION @InitDlgHandle
         MESSAGE TYPE [//BothDB/2DBSample/RequestMessage]
          (@RequestMsg);
    
    SELECT @RequestMsg AS SentRequestMsg;
    
    COMMIT TRANSACTION;
    GO
    

Przełącz się do bazy danych TargetDB

  • Skopiuj i wklej następujący kod w oknie Edytora kwerend.Następnie uruchom go przełączyć kontekst do TargetDB bazy danych, gdy zostanie wyświetlony komunikat żądania i Wyślij komunikat odpowiedzi z powrotem do InitiatorDB.

    USE TargetDB;
    GO
    

Żądanie odbierania i wysyłania odpowiedzi

  • Skopiuj i wklej następujący kod w oknie Edytora kwerend.Następnie uruchom go komunikat odpowiedzi z TargetQueue2DB i wysłać wiadomość odpowiedzi do inicjatora.Instrukcja ODBIERZ pobiera komunikat żądania.Następnie Poniższa instrukcja SELECT wyświetla tekst tak, aby sprawdzić, czy jest ten sam komunikat, który został wysłany w poprzednim kroku.Instrukcja jeżeli testy czy odebranej wiadomości jest typ komunikatu żądania i Wyślij oświadczenie jest używany do wysłania komunikatu odpowiedzi z powrotem do inicjatora.Również badania czy KONWERSACJI koniec instrukcja jest używana do końca strony miejsce docelowe konwersacji.Końcowe instrukcja SELECT wyświetla tekst komunikatu odpowiedzi.

    DECLARE @RecvReqDlgHandle UNIQUEIDENTIFIER;
    DECLARE @RecvReqMsg NVARCHAR(100);
    DECLARE @RecvReqMsgName sysname;
    
    BEGIN TRANSACTION;
    
    WAITFOR
    ( RECEIVE TOP(1)
        @RecvReqDlgHandle = conversation_handle,
        @RecvReqMsg = message_body,
        @RecvReqMsgName = message_type_name
      FROM TargetQueue2DB
    ), TIMEOUT 1000;
    
    SELECT @RecvReqMsg AS ReceivedRequestMsg;
    
    IF @RecvReqMsgName =
       N'//BothDB/2DBSample/RequestMessage'
    BEGIN
         DECLARE @ReplyMsg NVARCHAR(100);
         SELECT @ReplyMsg =
            N'<ReplyMsg>Message for Initiator service.</ReplyMsg>';
    
         SEND ON CONVERSATION @RecvReqDlgHandle
              MESSAGE TYPE
                [//BothDB/2DBSample/ReplyMessage] (@ReplyMsg);
    
         END CONVERSATION @RecvReqDlgHandle;
    END
    
    SELECT @ReplyMsg AS SentReplyMsg;
    
    COMMIT TRANSACTION;
    GO
    

Przełącz się do bazy danych InitiatorDB

  • Skopiuj i wklej następujący kod w oknie Edytora kwerend.Następnie uruchom go przełączyć kontekst do InitiatorDB bazy danych, gdzie zostanie wyświetlony komunikat odpowiedzi i zakończyć konwersację.

    USE InitiatorDB;
    GO
    

Odbieranie odpowiedzi i zakończyć konwersację

  • Skopiuj i wklej następujący kod w oknie Edytora kwerend.Następnie należy uruchomić odbieranie komunikatu odpowiedzi i zakończenia konwersacji.Instrukcja ODBIERZ pobiera komunikat odpowiedzi z InitiatorQueue2DB.Instrukcja KONWERSACJI KOŃCOWEGO kończy się po stronie inicjatora rozmowy.Ostatniej instrukcja SELECT wyświetla tekst komunikatu odpowiedzi tak, aby potwierdzić, jest taka sama jak co został wysłany w poprzednim kroku.

    DECLARE @RecvReplyMsg NVARCHAR(100);
    DECLARE @RecvReplyDlgHandle UNIQUEIDENTIFIER;
    
    BEGIN TRANSACTION;
    
    WAITFOR
    ( RECEIVE TOP(1)
        @RecvReplyDlgHandle = conversation_handle,
        @RecvReplyMsg = message_body
      FROM InitiatorQueue2DB
    ), TIMEOUT 1000;
    
    END CONVERSATION @RecvReplyDlgHandle;
    
    -- Display recieved request.
    SELECT @RecvReplyMsg AS ReceivedReplyMsg;
    
    COMMIT TRANSACTION;
    GO
    

Następne kroki

To jest koniec samouczka. Samouczki to tylko krótkie wprowadzenia. Nie są w nich opisane wszystkie dostępne opcje. W samouczkach jest używana uproszczona logika oraz obsługa błędów i nie należy używać ich w środowisku produkcyjnym. Aby utworzyć efektywne, niezawodny i niezawodne konwersacji, należy kodu bardziej złożone niż przykładzie w tym samouczku.

Wróć do samouczków Service Broker

Service Broker samouczki