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.