2010-08-03 15 views
6

Quiero implementar un procedimiento almacenado (dentro de una infraestructura de intermediario de servicios) que llama a un servicio web. Busqué algunos ejemplos del libro de Aschenbrenner sobre Service Broker. Sin embargo, no encuentro ninguno con una llamada de servicio web. ¿Alguien podría ayudar?Service Broker And Web services

Gracias Sqlbs

Respuesta

0

Ver el primer ejemplo en el capítulo 10. Si su pregunta es acerca de detalles de la implementación llamadas de servicio web, por favor marcar la pregunta con etiquetas de servicio Web correspondiente en lugar de corredor de servicio.

+0

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

0

Me gustaría hacer el servicio de Windows que está al final del corredor de servicios (y llamar al servicio web como en cualquier aplicación de win). De alguna manera, no creo que llamar al servicio web desde db sea una buena idea.

puede encontrar un activador externo here. y descarga la interfaz del agente de servicio/activador externo here. ¡La interfaz de Service Broker es genial! fácil de usar.

4

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.