Lição 2: Começando uma conversação e transmitindo mensagens
Nesta lição você aprenderá a iniciar uma conversação, concluir um ciclo único de mensagem de solicitação-resposta e a terminar a conversação em seguida.
Procedimentos
Alternar para o banco de dados AdventureWorks
Copie e cole o código a seguir em uma janela do Editor de Consultas. Em seguida, execute-o para alternar para o contexto do banco de dados AdventureWorks.
USE AdventureWorks; GO
Começar uma conversação e enviar uma mensagem de solicitação
Copie e cole o código a seguir em uma janela do Editor de Consultas. Em seguida, execute-o para iniciar uma conversação e enviar uma mensagem de solicitação para o //AWDB/1DBSample/TargetService. O código precisará ser executado em bloco único porque há uma variável que é usada para passar um identificador de caixa de diálogo da instrução BEGIN DIALOG para a instrução SEND. O lote executa a instrução BEGIN DIALOG para iniciar a conversação. Ele cria uma mensagem de solicitação e depois usa o identificador de caixa de diálogo em uma instrução SEND para enviar a mensagem de solicitação nessa conversação. A última instrução SELECT exibe o texto da mensagem enviada.
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
Receber a solicitação e enviar uma resposta
Copie e cole o código a seguir em uma janela do Editor de Consultas. Em seguida, execute-o para receber a mensagem de resposta do TargetQueue1DB e enviar uma mensagem de resposta para o iniciador. A instrução RECEIVE recupera a mensagem de solicitação. A instrução SELECT que segue exibe o texto para que seja possível verificar se é a mesma mensagem enviada na última etapa. A instrução IF testa se a mensagem recebida é do tipo de mensagem de solicitação e se uma instrução SEND será usada para enviar uma mensagem de resposta para o iniciador. A instrução END CONVERSATION é usada para terminar o lado de destino da conversação. A instrução SELECT final exibe o texto da mensagem de resposta.
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
Receber a resposta e terminar a conversação
Copie e cole o código a seguir em uma janela do Editor de Consultas. Em seguida, execute-o para receber a mensagem de resposta e terminar a conversação. A instrução RECEIVE recupera a mensagem de resposta do InitiatorQueue1DB. A instrução END CONVERSATION termina o lado de iniciador da conversação. A última instrução SELECT exibe o texto da mensagem de resposta, de modo que você poderá confirmar se ela é a mesma enviada na etapa anterior.
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
Próximas etapas
Você concluiu com êxito um ciclo de mensagem de solicitação-resposta entre o //AWDB/1DBSample/InitiatorService e o //AWDB/1DBSample/TargetService. Essa lição poderá ser repetida o quanto for necessário para transmitir um par de mensagens de solicitação-resposta. Quando você terminar de investigar as instruções SEND e REPLY, descarte todos os objetos que foram usados pela conversação. Para obter mais informações, consulte Lição 3: Descartando os objetos de conversação.
Consulte também