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