Tuvimos una tarea similar en mi empresa y descubrimos que una solución óptima era utilizar activadores asíncronos con un activador externo que llama a los servicios web desde .NET y elimina los mensajes de cola después de una llamada exitosa. Lo que significa que crea un activador de base de datos regular que envía un mensaje a la cola del intermediario de servicios para el procesamiento asincrónico. AKA disparador asincrónico. aquí es una muestra del capítulo 10 del libro de Klause
-- Create the trigger written with T-SQL
CREATE TRIGGER OnCustomerInserted ON Customers FOR INSERT
AS
DECLARE @conversationHandle UNIQUEIDENTIFIER
DECLARE @fromService SYSNAME
DECLARE @toService SYSNAME
DECLARE @onContract SYSNAME
DECLARE @messageBody XML
SET @fromService = 'CustomerInsertedClient'
SET @toService = 'CustomerInsertedService'
SET @onContract = 'http://ssb.csharp.at/SSB_Book/c10/CustomerInsertContract'
-- Check if there is already an ongoing conversation with the TargetService
SELECT @conversationHandle = ConversationHandle FROM SessionConversations
WHERE SPID = @@SPID
AND FromService = @fromService
AND ToService = @toService
AND OnContract = @onContract
IF @conversationHandle IS NULL
BEGIN
-- We have to begin a new Service Broker conversation with the TargetService
BEGIN DIALOG CONVERSATION @conversationHandle
FROM SERVICE @fromService
TO SERVICE @toService
ON CONTRACT @onContract
WITH ENCRYPTION = OFF;
-- Create the dialog timer for ending the ongoing conversation
BEGIN CONVERSATION TIMER (@conversationHandle) TIMEOUT = 5;
-- Store the ongoing conversation for further use
INSERT INTO SessionConversations (SPID, FromService, ToService, OnContract, ConversationHandle)
VALUES
(
@@SPID,
@fromService,
@toService,
@onContract,
@conversationHandle
)
END
-- Construct the request message
SET @messageBody = (SELECT * FROM INSERTED FOR XML AUTO, ELEMENTS);
-- Send the message to the TargetService
;SEND ON CONVERSATION @conversationHandle
MESSAGE TYPE [http://ssb.csharp.at/SSB_Book/c10/CustomerInsertedRequestMessage] (@messageBody);
En lugar de utilizar procedimientos almacenados que llamar a los servicios web a través de código administrado (activación interna) decidimos que es mejor para descargar que el procesamiento fuera del servidor SQL. Y encontró esta pequeña y bonita herramienta creada por Microsoft - External Activator que escuchará la cola de activación y ejecutará una aplicación cuando haya un nuevo mensaje en la cola. Para la implementación, consulte el Capítulo 4 de Klaus en el libro.
Hola, Gracias por sus notas. Miré el ejemplo. Se trata de la convocatoria de un servicio web dentro de la infraestructura del intermediario de servicios. Lo que realmente necesito es algo como esto: fila insertada/actualizada en la tabla -> insertar/actualizar incendios desencadenantes -> gatillo escribe mensaje en la cola del bróker de servicio -> proc almacenado activado por SQL Server -> llamadas a proc almacenadas servicio web -> la conversación termina ¿Alguna idea? Sqlbs – user409679