Udostępnij za pośrednictwem


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

W tej lekcji użytkownik zapozna zakończenie cyklu wiadomości proste żądanie odpowiedź w systemie skonfigurowano wewnętrznego aktywacja procedura składowana.

Procedury

Przełącz się do bazy danych AdventureWorks2008R2

  • Skopiuj i wklej następujący kod w oknie Edytora kwerend.Następnie uruchom go przełączyć kontekst do AdventureWorks2008R2 bazy danych.

    USE AdventureWorks2008R2;
    GO
    

Rozpocząć konwersację 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 //AWDB/InternalAct/TargetService.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 rozpocząć okna DIALOGOWEGO, aby rozpocząć rozmowę.Tworzy komunikat żądania, a następnie używa uchwyt okna dialogowego w instrukcja WYSYŁANIA, wysłać komunikatu żą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
          [//AWDB/InternalAct/InitiatorService]
         TO SERVICE
          N'//AWDB/InternalAct/TargetService'
         ON CONTRACT
          [//AWDB/InternalAct/SampleContract]
         WITH
             ENCRYPTION = OFF;
    
    -- Send a message on the conversation
    SELECT @RequestMsg =
           N'<RequestMsg>Message for Target service.</RequestMsg>';
    
    SEND ON CONVERSATION @InitDlgHandle
         MESSAGE TYPE 
         [//AWDB/InternalAct/RequestMessage]
         (@RequestMsg);
    
    -- Diplay sent request.
    SELECT @RequestMsg AS SentRequestMsg;
    
    COMMIT TRANSACTION;
    GO
    

Żądanie odbierania i wysyłania odpowiedzi

  • Podczas wysyłania wiadomości żądania Service Broker automatycznie uaktywnia kopię TargetActiveProc.procedura składowana odbiera komunikat odpowiedzi z TargetQueueIntAct i wysyła komunikat odpowiedzi inicjatora.

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 InitiatorQueueIntAct.Instrukcja KONWERSACJI KOŃCOWEGO kończy się po stronie inicjatora rozmowy i wysyła EndDialog komunikat usługa miejsce docelowe.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 InitiatorQueueIntAct
    ), TIMEOUT 5000;
    
    END CONVERSATION @RecvReplyDlgHandle;
    
    -- Display recieved request.
    SELECT @RecvReplyMsg AS ReceivedReplyMsg;
    
    COMMIT TRANSACTION;
    GO
    

Koniec strony miejsce docelowe konwersacji

  • Podczas wykonywania instrukcja KONWERSACJI końcowy inicjatora, Service Broker wysyła EndDialog wiadomości do TargetQueueIntAct kolejki.TargetActiveProc odbiera procedury EndDialog wiadomości i wystawia KONWERSACJI zakończenia, kończący się na stronie miejsce docelowe konwersacji.

Następne kroki

Pomyślnie ukończono żądanie odpowiedź cyklu wiadomości między //AWDB/InternalAct/InitiatorService i //AWDB/InternalAct/TargetService.W tej lekcji tyle razy, ile chce przesyłać żądanie odpowiedź parę wiadomości można powtórzyć kroki.Po zakończeniu badania instrukcje WYSYŁANIA i odpowiedzi można usunąć wszystkie obiekty, które były używane przez konwersacji.Aby uzyskać więcej informacji, zobacz Lekcja 4: Upuszczanie obiektów konwersacji.