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.