Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:programu SQL Server
Azure SQL Managed Instance
W tej lekcji dowiesz się, jak rozpocząć konwersację, ukończyć prosty cykl wiadomości z odpowiedzią na żądanie, a następnie zakończyć konwersację.
Procedury
Notatka
Przykłady kodu w tym artykule zostały przetestowane przy użyciu przykładowej bazy danych AdventureWorks2022
, którą można pobrać ze strony głównej Przykłady programu Microsoft SQL Server i projekty społeczności.
Przełącz się do bazy danych AdventureWorks2008R2
Skopiuj i wklej następujący kod w oknie Edytor zapytań. Następnie uruchom go, aby przełączyć kontekst do bazy danych AdventureWorks2008R2.
USE AdventureWorks2008R2; GO
Rozpocznij rozmowę i wyślij wiadomość z prośbą
Skopiuj i wklej następujący kod w oknie Edytor zapytań. Następnie uruchom ją, aby rozpocząć konwersację i wysłać komunikat żądania do //AWDB/1DBSample/TargetService. Kod musi być uruchamiany w jednym bloku, ponieważ zmienna jest używana do przekazywania uchwytu okna dialogowego z BEGIN DIALOG do instrukcji SEND. Partia uruchamia instrukcję BEGIN DIALOG, aby rozpocząć konwersację. Tworzy komunikat żądania, a następnie używa dojścia okna dialogowego w instrukcji SEND, aby wysłać komunikat żądania w tej konwersacji. Ostatnia instrukcja SELECT wyświetla tekst wysłanej wiadomości.
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
Odbieranie żądania i wysyłanie odpowiedzi
Skopiuj i wklej następujący kod w oknie Edytor zapytań. Następnie uruchom go, aby odebrać wiadomość odpowiedzi z TargetQueue1DB i wysłać wiadomość odpowiedzi z powrotem do inicjatora. Instrukcja RECEIVE pobiera komunikat żądania. Poniższa instrukcja SELECT wyświetla tekst, aby sprawdzić, czy jest to ten sam komunikat wysłany w ostatnim kroku. Instrukcja IF sprawdza, czy odebrany komunikat jest typem komunikatu żądania, a jeśli instrukcja SEND jest używana do wysyłania komunikatu odpowiedzi z powrotem do inicjatora. Instrukcja END CONVERSATION służy do zakończenia strony docelowej konwersacji. Końcowa instrukcja SELECT wyświetla tekst wiadomości 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
Odbierz odpowiedź i zakończ konwersację
Skopiuj i wklej następujący kod w oknie Edytor zapytań. Następnie uruchom go, aby otrzymać wiadomość odpowiedzi i zakończyć konwersację. Instrukcja RECEIVE pobiera komunikat odpowiedzi z InitiatorQueue1DB. Instrukcja END CONVERSATION kończy stronę inicjatora konwersacji. Ostatnia instrukcja SELECT wyświetla tekst wiadomości odpowiedzi, aby potwierdzić, że jest ona taka sama jak ta, która została wysłana 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 cykl komunikatu typu żądanie-odpowiedź między usługą inicjującą //AWDB/1DBSample/InitiatorService a usługą docelową //AWDB/1DBSample/TargetService. Kroki opisane w tej lekcji można powtórzyć wielokrotnie, gdy chcesz przesłać parę komunikatów z odpowiedzią na żądanie. Po zakończeniu analizowania instrukcji SEND i REPLY możesz usunąć wszystkie obiekty, które zostały użyte w konwersacji. Aby uzyskać więcej informacji, zobacz Lekcja 3: Upuszczanie obiektów konwersacji.