Udostępnij przez


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

W tej lekcji dowiesz się do zakończenia cyklu wiadomości proste żądanie odpowiedź w systemie skonfigurowano procedury aktywacja wewnętrznego przechowywania.

Procedury

Przełącz się do bazy danych AdventureWorks

  • Skopiuj i wklej następujący kod w oknie Edytor kwerend.Następnie uruchom go, należy przełączyć kontekst do AdventureWorks bazy danych.

    USE AdventureWorks;
    GO
    

Rozpocząć konwersację i wysłać wiadomość żądania

  • Skopiuj i wklej następujący kod w oknie Edytor kwerend.Następnie należy uruchomić na rozpoczęcie konwersacji i wysłać wiadomość żądania //AWDB/InternalAct/TargetService.Kod musi być uruchamiana w jeden blok, ponieważ zmienna jest używana do przekazania uchwyt okna dialogowego z instrukcja BEGIN DIALOG instrukcja SEND.partia jest uruchamiane instrukcja BEGIN DIALOG, aby rozpocząć konwersację.Tworzy komunikat z żądaniem, a następnie używa uchwyt okna dialogowego w instrukcja SEND, aby wysłać komunikat żądania w tej konwersacji.Ostatnia instrukcja SELECT służy do wyświetlania tekstu wiadomości, która została wysłana.

    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
    

Odbierają żądanie i przesyła odpowiedź

  • Po wysłaniu komunikatu żądania Service Broker automatycznie uaktywnia kopię TargetActiveProc.Procedura przechowywana odbiera komunikat odpowiedzi z TargetQueueIntAct i wysyła komunikat odpowiedzi z powrotem do inicjatora.

Odbieranie odpowiedzi i Zakończ rozmowę

  • Skopiuj i wklej następujący kod w oknie Edytor kwerend.Następnie uruchom go do odbierania wiadomości odpowiedzi i zakończenia rozmowy.Instrukcja przyjęcie pobiera komunikat odpowiedzi z InitiatorQueueIntAct.W instrukcja END KONWERSACJI kończy się strony inicjatora rozmowy i wysyła EndDialog wiadomości z usługa docelową.Ostatniej instrukcja SELECT służy do wyświetlania tekstu komunikatu odpowiedzi, dzięki czemu można potwierdzić jest taki sam, jak to, co zostało wysłane 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 END KONWERSACJI dla inicjatora, Service Broker wysyła EndDialog wiadomościTargetQueueIntAct kolejki.The TargetActiveProc procedure receives the EndDialog message and issues an END CONVERSATION that ends the miejsce docelowe side of the conversation.

Następne kroki

Pomyślnie ukończono żądanie odpowiedź cyklu wiadomości między //AWDB/InternalAct/InitiatorService and the //AWDB/InternalAct/TargetService.Można powtórzyć kroki opisane w tej lekcji tyle razy, ile chcesz transmisji dwóch żądanie odpowiedź wiadomości.Po zakończeniu badania instrukcje SEND i REPLY 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.