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 nauczysz się ukończyć podstawowy cykl wiadomości żądanie-odpowiedź w systemie skonfigurowanym przy użyciu wewnętrznej procedury składowanej aktywacji.
Procedury
Przełącz się do bazy danych AdventureWorks
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.
Skopiuj i wklej następujący kod w oknie Edytor zapytań. Następnie uruchom go, aby przełączyć kontekst do bazy danych AdventureWorks2022
.
USE AdventureWorks2022;
GO
Rozpocznij rozmowę i wyślij wiadomość z prośbą.
Skopiuj i wklej następujący kod w oknie Edytor zapytań. Następnie uruchom go, aby rozpocząć konwersację i wysłać wiadomość żądania do //AWDB/InternalAct/TargetService
. Kod musi być uruchamiany w jednym bloku, ponieważ zmienna jest używana do przekazywania dojścia okna dialogowego z BEGIN DIALOG
do instrukcji SEND
. Zadanie uruchamia instrukcję BEGIN DIALOG
, aby rozpocząć rozmowę. 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 AS UNIQUEIDENTIFIER;
DECLARE @RequestMsg AS 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);
-- Display sent request.
SELECT @RequestMsg AS SentRequestMsg;
COMMIT TRANSACTION;
GO
Odbieranie żądania i wysyłanie odpowiedzi
Po wysłaniu komunikatu żądania usługa Service Broker automatycznie aktywuje kopię TargetActiveProc
. Procedura składowana odbiera komunikat odpowiedzi z TargetQueueIntAct
i wysyła wiadomość odpowiedzi z powrotem do inicjatora.
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 wiadomość odpowiedzi z InitiatorQueueIntAct
. Instrukcja END CONVERSATION
kończy stronę inicjatora konwersacji i wysyła komunikat EndDialog
do usługi docelowej. 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 AS NVARCHAR (100);
DECLARE @RecvReplyDlgHandle AS UNIQUEIDENTIFIER;
BEGIN TRANSACTION;
WAITFOR (RECEIVE TOP (1) @RecvReplyDlgHandle = conversation_handle,
@RecvReplyMsg = message_body FROM InitiatorQueueIntAct),
TIMEOUT 5000;
END CONVERSATION @RecvReplyDlgHandle;
-- Display received request.
SELECT @RecvReplyMsg AS ReceivedReplyMsg;
COMMIT TRANSACTION;
GO
Kończ stronę docelową konwersacji
Po wykonaniu instrukcji END CONVERSATION
dla inicjatora, usługa Service Broker wysyła komunikat EndDialog
do kolejki TargetQueueIntAct
. Procedura TargetActiveProc
odbiera wiadomość EndDialog
i wysyła END CONVERSATION
kończącą konwersację po stronie docelowej.
Następny krok
Pomyślnie ukończono cykl komunikatu z odpowiedzią na żądanie między //AWDB/InternalAct/InitiatorService
a //AWDB/InternalAct/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 używane przez konwersację.