Lekcja 4: Począwszy od konwersacji i przenoszenia wiadomości
W tej lekcji dowiesz się na rozpoczęcie konwersacji obejmującego dwie bazy danych w tym samym wystąpieniu Database Engine. Będzie można również dowiedzieć się, jak wykonać proste żądanie odpowiedź cyklu wiadomości, a następnie zakończyć rozmowę.
Procedury
Przełącz się do bazy danych InitiatorDB
Skopiuj i wklej następujący kod w oknie Edytor kwerend.Następnie uruchom go, należy przełączyć kontekst do InitiatorDB bazy danych w przypadku gdy rozpocznie się do konwersacji.
USE InitiatorDB; GO
Rozpoczęcie konwersacji 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 //TgtDB/2DBSample/TargetService in the TargetDB.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 w celu rozpoczęcia konwersacji i budowanie komunikat z żądaniem.Następnie użyto uchwyt okna dialogowego w instrukcja SEND do wysłania komunikatu żą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 [//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 Edytor kwerend.Następnie uruchom go, należy przełączyć kontekst do TargetDB bazy danych, gdzie będzie otrzymywać komunikat żądania i Wyślij wiadomość odpowiedzi do InitiatorDB.
USE TargetDB; 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 TargetQueue2DB i zostanie wysłany komunikat odpowiedzi z powrotem do inicjatora.Instrukcja przyjęcie pobiera komunikat żądania.Następnie następującą instrukcję WYBIERAJĄCĄ Wyświetla tekst tak, aby sprawdzić, czy jest on ten sam komunikat, który został wysłany w poprzednim 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.On również sprawdza, czy instrukcja KONWERSACJI END jest używany 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 Edytor kwerend.Następnie uruchom go, należy przełączyć kontekst do InitiatorDB Baza danych gdzie będzie wyświetlany komunikat odpowiedzi i zakończyć rozmowę.
USE InitiatorDB; 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 InitiatorQueue2DB.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 InitiatorQueue2DB ), TIMEOUT 1000; END CONVERSATION @RecvReplyDlgHandle; -- Display recieved request. SELECT @RecvReplyMsg AS ReceivedReplyMsg; COMMIT TRANSACTION; GO
Następne kroki
This concludes the tutorial. Tutorials are brief introductions only. They do not describe all available options. Tutorials use simplified logic and error handling, and should not be used in a production environment. Aby utworzyć efektywne, niezawodne i niezawodne konwersacji, należy kodu bardziej złożone niż w przykładzie w tej instrukcji.