2013-06-13 6 views
1

DB 트리거에서 exe를 시작하려면 SSB 외부 활성화가 필요합니다. 정보의 비트로 그물에서 사용할 수있는 거의 모든 일을 완벽하게 처리 할 수있었습니다. 내가 큐에 메시지를 보낼 수 있고 큐를 끊고 db를 계속 폴링하는 C# 응용 프로그램을 사용하여 메시지를 읽을 수 있습니다. 하지만 내 exe를 실제로 실행하려면 External Activator가 필요합니다. 이것은 일을위한 것이고 나는 어떤 도움을 크게 극명하게하기 위해 붙어 있습니다!SQL Service Broker 외부 활성 기가 exe를 시작하지 않음

외부 활성제 로그 파일 : Here

외부 활성제 구성 파일 : Here

감사 : 큐 (사진)의 Here

상태 '!

편집 : SQL 코드 :

대한 ALTER DATABASE ROLLBACK IMMEDIATE로 AdventureWorks2012 SET ENABLE_BROKER;

메시지 유형 [requestMessageType] VALIDATION = WELL_FORMED_XML

CREATE 메시지 유형 [responseMessageType] VALIDATION = WELL_FORMED_XML

생성 계약 [smtContract] ( [requestMessageType] 이니시에이터 보내 [responseMessageType을 만들 ] 대상으로 전송 )

CREATE QUEUE InitiatorQueue WITH ST ATUS는 =

ON

는 [ ( [smtContract] )

QUEUE TargetQueue ( 을 노선 targetService와 을 만들 QUEUE InitiatorQueue ON smtContract를 SERVICE InitiatorService 을 만들

= ON 상태 QUEUE TargetQueue 을 만들 ] )

CREATE QUEUE ExternalActivat WITH STATUS orQueue =

ON QUEUE ExternalActivatorQueue ( [http://schemas.microsoft 노선 ExternalActivatorService 을 만들.COM/SQL/알림/PostEventNotification] )

이벤트 알림을 만들 EventNotificationTargetQueue ON QUEUE TargetQueue 에 대한 QUEUE_ACTIVATION 서비스 'ExternalActivatorService', '현재 데이터베이스'TO;

테이블 만들기 [주문] ( ID INT 신원 (1000,1) NULL NOT, 금액의 돈 NULL NOT )

- 트리거 만들기 ImportQueue에 메시지를 추가합니다 TRIGGER OnOrderInserted ON [ 주문] 삽입 용 BEGIN BEGIN TRANSACTION; DECLARE @ch UNIQUEIDTITIER DECLARE @messageBody NVARCHAR (MAX);

BEGIN DIALOG CONVERSATION @ch 
      FROM SERVICE [InitiatorService] 
      TO SERVICE 'TargetService' 
      ON CONTRACT [smtContract] 
      WITH ENCRYPTION = OFF; 

    -- Construct the request message 
    SET @messageBody = (SELECT ID, Amount FROM [Order] FOR XML AUTO, ELEMENTS); 

    -- Send the message to the TargetService 
    ;SEND ON CONVERSATION @ch 
    MESSAGE TYPE [requestMessageType] (@messageBody); 
COMMIT; 

END GO에

데이터베이스에

ALTER 권한 :: AdventureWorks2012 [SA] 활성화에 함께

ALTER QUEUE InitiatorQueue ( PROCEDURE_NAME = ProcessResponseMessages, STATUS = ON, OWNER AS EXECUTE = 1, MAX_QUEUE_READERS) 메시지를 형성를 보내기에 매우 조심해야

+1

, 그것은 보안 문제로 밝혀졌다 플러스 수동으로 EA의 Windows 서비스를 시작해야합니다 잊지 마세요. (또한 해당 서비스를 제공하는 자격 증명은 db 쿼리에 사용되는 자격 증명이 될 것입니다.) 이것은 매우 힘든 행운입니다! – OverMars

답변