Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Azure SQL Managed Instance
Nesta lição, você aprende a iniciar uma conversa, concluir um ciclo simples de mensagens de solicitação-resposta e, em seguida, encerrar a conversa.
Procedimentos
Observação
Os exemplos de código neste artigo foram testados usando o banco de dados de exemplo AdventureWorks2025, que pode ser descarregado da página inicial de Microsoft SQL Server Samples and Community Projects.
Alternar para o banco de dados AdventureWorks2008R2
Copie e cole o código a seguir em uma janela do Editor de Consultas e execute-o para alternar o contexto para o banco de dados AdventureWorks2008R2.
USE AdventureWorks2008R2; GO
Iniciar uma conversa e enviar uma mensagem de solicitação
Copie e cole o código a seguir em uma janela do Editor de Consultas, execute-o para iniciar uma conversa e enviar uma mensagem de solicitação para o AWDB/1DBSample/TargetService. Você deve executar o código em um bloco porque uma variável é usada para passar um identificador de diálogo de
BEGIN DIALOGpara aSENDinstrução. O lote executa aBEGIN DIALOGinstrução para iniciar a conversa. Ele cria uma mensagem de solicitação e, em seguida, usa o identificador de diálogo em umaSENDinstrução para enviar a mensagem de solicitação nessa conversa. A últimaSELECTinstrução exibe o texto da mensagem que foi enviada.DECLARE @InitDlgHandle AS UNIQUEIDENTIFIER; DECLARE @RequestMsg AS 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
Receba o pedido e envie uma resposta
Copie e cole o código a seguir em uma janela do Editor de Consultas, execute-o para receber a mensagem de resposta do
TargetQueue1DBe envie uma mensagem de resposta de volta para o iniciador. ARECEIVEinstrução recupera a mensagem de solicitação. A instrução a seguirSELECTexibe o texto para que você possa verificar se é a mesma mensagem enviada na última etapa. AIFinstrução testa se a mensagem recebida é um tipo de mensagem de solicitação e se umaSENDinstrução é usada para enviar uma mensagem de resposta de volta ao iniciador. AEND CONVERSATIONdeclaração é usada para encerrar o lado alvo da conversa. A declaração finalSELECTexibe o texto da mensagem de resposta.DECLARE @RecvReqDlgHandle AS UNIQUEIDENTIFIER; DECLARE @RecvReqMsg AS NVARCHAR (100); DECLARE @RecvReqMsgName AS 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 AS 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
Receba a resposta e termine a conversa
Copie e cole o código a seguir em uma janela do Editor de Consultas e, em seguida, execute-o para receber a mensagem de resposta e encerrar a conversa. A
RECEIVEinstrução recupera a mensagem de resposta doInitiatorQueue1DB. AEND CONVERSATIONdeclaração encerra o lado iniciador da conversa. A últimaSELECTinstrução exibe o texto da mensagem de resposta para que você possa confirmar que é o mesmo que foi enviado na etapa anterior.DECLARE @RecvReplyMsg AS NVARCHAR (100); DECLARE @RecvReplyDlgHandle AS 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
Tarefas relacionadas
- INICIAR CONVERSA DE DIÁLOGO (Transact-SQL)
- ENVIAR (Transact-SQL)
- RECEBER (Transact-SQL)
- TERMINAR CONVERSA (Transact-SQL)
- Aplicativos do Service Broker
Próximo passo
Você concluiu com êxito um ciclo de mensagens de solicitação-resposta entre o AWDB/1DBSample/InitiatorService e o AWDB/1DBSample/TargetService. Você pode repetir as etapas desta lição quantas vezes quiser transmitir um par de mensagens solicitação-resposta. Quando terminar de investigar as SEND declarações e REPLY , você pode soltar todos os objetos que foram usados pela conversa.