2010-08-03 16 views
6

Ich möchte eine gespeicherte Prozedur implementieren (innerhalb einer Service Broker Infrasturte), die einen Webdienst aufruft. Ich habe einige Beispiele aus Aschenbrenners Buch über Service Broker gelesen. Bei einem Web Service Call finde ich jedoch keine. Könnte jemand helfen?Service Broker und Webdienste

Dank Sqlbs

Antwort

0

Siehe das erste Beispiel in Kapitel 10. Wenn Ihre Frage über Einzelheiten der Durchführung Web-Service-Anrufe ist, die Frage mit den entsprechenden Web-Service-Tags markieren Sie bitte anstatt Service-Broker.

+0

Hallo, Vielen Dank für Ihre Notizen. Ich schaute auf das Beispiel. Es geht um den Aufruf einer Web-Service innerhalb der Service-Broker-Infrastruktur. Was ich wirklich brauche, ist etwa folgendes: Zeile eingefügt/in Tabelle aktualisiert -> Trigger einfügen/aktualisieren -> Trigger schreibt Nachricht in die Service Broker-Warteschlange -> Stored Proc aktiviert von SQL Server -> gespeicherte Proc-Aufrufe Web-Service -> Die Konversation endet. Irgendeine Idee? Sqlbs – user409679

0

Ich würde Windows-Dienst, der am Ende der Service-Broker ist (und rufen Sie Web-Service wie in jeder Win-App). Irgendwie denke nicht, dass das Anrufen von Webservice von db eine nette Idee ist.

kann einen externen Aktivator finden here. und Download Service Broker-Schnittstelle/externer Aktivator here. Service-Broker-Schnittstelle ist einfach großartig! Einfach zu verwenden.

4

Wir hatten eine ähnliche Aufgabe in meiner Firma und herausgefunden, eine optimale Lösung war die Verwendung von asynchronen Auslösern mit externen Aktivator, der Webservices von .NET aufruft und Nachrichten nach erfolgreichem Aufruf aus der Warteschlange löscht. Mit dieser Maßnahme erstellen Sie einen regulären Datenbanktrigger, der eine Nachricht zur asynchronen Verarbeitung an die Service Broker-Warteschlange sendet. AKA Asynchroner Trigger. Hier ist ein Beispiel aus dem Kapitel 10 des Klause Buch

-- 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); 

Stattdessen gespeicherte Prozeduren zu verwenden, die Web-Services durch verwalteten Code nennen würde (interne Aktivierung) haben wir beschlossen, dass es besser ist, dass die Verarbeitung außerhalb von SQL Server auszulagern. Und dieses nette kleine Tool von Microsoft - External Activator gefunden, die auf die Aktivierungswarteschlange hören und eine Anwendung starten, wenn eine neue Nachricht in der Warteschlange ist. Zur Umsetzung lesen Sie bitte Klaus's Kapitel 4 im Buch.

Verwandte Themen