2010-08-03 5 views
6

웹 서비스를 호출하는 저장 프로 시저 (서비스 브로커 인프라 내에서)를 구현하고 싶습니다. Service Broker에 대한 Aschenbrenner의 저서에서 몇 가지 예를 살펴 보았습니다. 그러나 나는 웹 서비스 호출을 발견하지 못한다. 아무도 도와 줄 수 있습니까? 귀하의 질문은 웹 서비스 호출을 구현의 세부 사항에 대해 경우Service Broker 및 웹 서비스

덕분에 Sqlbs

답변

0

장 (10)의 첫 번째 예를 참조, 해당 웹 서비스 태그가 아닌 서비스 브로커와 질문에 태그를하시기 바랍니다.

+0

안녕하세요, 메모 해 주셔서 감사합니다. 예제를 살펴 보았습니다. 이는 서비스 브로커 인프라 내에서 웹 서비스 직원의 소집에 관한 것입니다. 내가 정말로 필요한 것은 다음과 같습니다 : 테이블에 삽입/업데이트 된 트리거 - 트리거는 서비스 브로커 대기열에 메시지를 씁니다 -> SQL Server에 의해 활성화 된 저장된 proc -> 저장된 proc 호출 웹 서비스 -> 대화가 끝납니다. 어떤 아이디어? Sqlbs – user409679

0

나는 서비스 중개인의 끝에있는 윈도우 서비스를 만들 것이고 (어떤 win 앱처럼 웹 서비스를 호출 할 것이다). 어떻게 든 db에서 웹 서비스를 호출하는 것은 좋은 생각이라고 생각하지 마십시오.

은 외부 활성화 제 here을 찾을 수 있습니다. 다운로드 서비스 브로커 인터페이스/외부 활성화 자 here. 서비스 중개인 공용 영역은 다만 중대하다! 사용하기 쉬운.

4

우리 회사에서도 비슷한 작업을 수행했으며 .NET에서 webservices를 호출하고 호출 성공 후 메시지를 대기열에 두는 외부 활성기와 함께 비동기 트리거를 사용하는 것이 최적의 솔루션이라는 것을 알았습니다. 그 meas는 비동기 처리를 위해 메시지를 서비스 브로커 큐에 보내는 일반 데이터베이스 트리거를 만드는 것입니다. 일명 비동기 트리거. 여기 Klause의 책 대신에 관리 코드 (내부 활성화) 우리가 SQL 서버의 외부에서 그 처리를 오프로드하는 것이 좋습니다 결정을 통해 웹 서비스를 호출 할 저장 프로 시저를 사용

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

의 10 장에서 샘플입니다. Microsoft에서 만든이 멋진 도구 - 활성화 대기열을 듣고 대기열에 새 메시지가있을 때 응용 프로그램을 시작하는 - External Activator 을 발견했습니다. 구현을 위해서는 클라우스의 제 4 장을 참고하십시오.

관련 문제