Udostępnij przez


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

W tej lekcji dowiesz się rozpocząć konwersację, zakończyć cykl wiadomości proste żądanie odpowiedź, a następnie Zakończ rozmowę.

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/1DBSample/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/1DBSample/InitiatorService]
         TO SERVICE
          N'//AWDB/1DBSample/TargetService'
         ON CONTRACT
          [//AWDB/1DBSample/SampleContract]
         WITH
             ENCRYPTION = OFF;
    
    SELECT @RequestMsg =
           N'<RequestMsg>Message for Target service.</RequestMsg>';
    
    SEND ON CONVERSATION @InitDlgHandle
         MESSAGE TYPE 
         [//AWDB/1DBSample/RequestMessage]
         (@RequestMsg);
    
    SELECT @RequestMsg AS SentRequestMsg;
    
    COMMIT TRANSACTION;
    GO
    

Odbierają żądanie i przesyła odpowiedź

  • Skopiuj i wklej następujący kod w oknie Edytor kwerend.Następnie uruchom go komunikat odpowiedzi z TargetQueue1DB i zostanie wysłany komunikat odpowiedzi z powrotem do inicjatora.Instrukcja przyjęcie pobiera komunikat żądania.Poniższa instrukcja SELECT służy do wyświetlania tekstu tak, aby sprawdzić, czy jest on tej samej wiadomości wysyłane w ostatnim kroku.Wyrażenie IF sprawdza, czy odebranej wiadomości jest to typ komunikatu żądania, a jeśli instrukcja SEND jest używany do wysyłania wiadomości odpowiedzi do inicjatora.W instrukcja END KONWERSACJI 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 TargetQueue1DB
    ), TIMEOUT 1000;
    
    SELECT @RecvReqMsg AS ReceivedRequestMsg;
    
    IF @RecvReqMsgName =
       N'//AWDB/1DBSample/RequestMessage'
    BEGIN
         DECLARE @ReplyMsg NVARCHAR(100);
         SELECT @ReplyMsg =
         N'<ReplyMsg>Message for Initiator service.</ReplyMsg>';
    
         SEND ON CONVERSATION @RecvReqDlgHandle
              MESSAGE TYPE 
              [//AWDB/1DBSample/ReplyMessage]
              (@ReplyMsg);
    
         END CONVERSATION @RecvReqDlgHandle;
    END
    
    SELECT @ReplyMsg AS SentReplyMsg;
    
    COMMIT TRANSACTION;
    GO
    

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 InitiatorQueue1DB.W instrukcja END KONWERSACJI kończy się strony inicjatora rozmowy.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 InitiatorQueue1DB
    ), TIMEOUT 1000;
    
    END CONVERSATION @RecvReplyDlgHandle;
    
    SELECT @RecvReplyMsg AS ReceivedReplyMsg;
    
    COMMIT TRANSACTION;
    GO
    

Następne kroki

Pomyślnie ukończono żądanie odpowiedź cyklu wiadomości między //AWDB/1DBSample/InitiatorService and the //AWDB/1DBSample/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 3: Upuszczanie obiektów konwersacji.