Lección 2: Comenzar una conversación y transmitir los mensajes
Nuevo: 15 de septiembre de 2007
En esta lección, aprenderá a iniciar una conversación, finalizar un sencillo ciclo de mensaje solicitud-respuesta y finalizar la conversación.
Procedimientos
Cambiar a la base de datos de AdventureWorks
Copie y pegue el código siguiente en una ventana del Editor de consultas. A continuación, ejecútelo para cambiar el contexto a la base de datos de AdventureWorks.
USE AdventureWorks; GO
Iniciar una conversación y enviar un mensaje de solicitud
Copie y pegue el código siguiente en una ventana del Editor de consultas. A continuación, ejecútelo para iniciar una conversación y enviar un mensaje de solicitud a //AWDB/1DBSample/TargetService. El código se debe ejecutar en un bloque porque se utiliza una variable para pasar un identificador de diálogo desde la instrucción BEGIN DIALOG hasta la instrucción SEND. El lote ejecuta la instrucción BEGIN DIALOG para iniciar la conversación. Se genera un mensaje de solicitud y luego utiliza el identificador de diálogo en una instrucción SEND para enviar el mensaje de solicitud en esa conversación. La instrucción SELECT final muestra el texto del mensaje que se envió.
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
Recibir la solicitud y enviar una respuesta
Copie y pegue el código siguiente en una ventana del Editor de consultas. A continuación, ejecútelo para recibir el mensaje de respuesta de TargetQueue2DB y devolver un mensaje de respuesta al iniciador. La instrucción RECEIVE recupera el mensaje de solicitud. La instrucción SELECT siguiente muestra el texto para que pueda comprobar que es el mismo mensaje enviado en el último paso. La instrucción IF comprueba si el mensaje recibido es un mensaje de solicitud y utiliza una instrucción SEND para devolver un mensaje de respuesta al iniciador. La instrucción END CONVERSATION se utiliza para finalizar el lado de destino de la conversación. La instrucción SELECT final muestra el texto del mensaje de respuesta.
DECLARE @RecvReqDlgHandle UNIQUEIDENTIFIER; DECLARE @RecvReqMsg NVARCHAR(100); DECLARE @RecvReqMsgName sysname; BEGIN TRANSACTION; RECEIVE TOP(1) @RecvReqDlgHandle = conversation_handle, @RecvReqMsg = message_body, @RecvReqMsgName = message_type_name FROM TargetQueue1DB; 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
Recibir la respuesta y finalizar la conversación
Copie y pegue el código siguiente en una ventana del Editor de consultas. A continuación, ejecútelo para recibir el mensaje de respuesta y finalizar la conversación. La instrucción RECEIVE recupera el mensaje de respuesta de InitiatorQueue2DB. La instrucción END CONVERSATION finaliza el lado del iniciador de la conversación. La instrucción SELECT final muestra el texto del mensaje de respuesta para que pueda confirmar que es el mismo que se envió en el paso anterior.
DECLARE @RecvReplyMsg NVARCHAR(100); DECLARE @RecvReplyDlgHandle UNIQUEIDENTIFIER; BEGIN TRANSACTION; RECEIVE TOP(1) @RecvReplyDlgHandle = conversation_handle, @RecvReplyMsg = message_body FROM InitiatorQueue1DB; END CONVERSATION @RecvReplyDlgHandle; SELECT @RecvReplyMsg AS ReceivedReplyMsg; COMMIT TRANSACTION; GO
Pasos siguientes
Ha completado correctamente un ciclo de mensaje solicitud-respuesta entre //AWDB/1DBSample/InitiatorService y //AWDB/1DBSample/TargetService. Puede repetir los pasos de esta lección tantas veces como desee para transmitir un par de mensajes de solicitud-respuesta. Cuando termine de analizar las instrucciones SEND y REPLY, puede eliminar todos los objetos que se han utilizado en la conversación. Para obtener más información, vea Lección 3: Quitar los objetos de conversación.
Vea también
Otros recursos
BEGIN DIALOG CONVERSATION (Transact-SQL)
SEND (Transact-SQL)
RECEIVE (Transact-SQL)
END CONVERSATION (Transact-SQL)
Service Broker Programming Basics