2010-11-23 3 views
2

대화가 닫히지 않고 전환 상태를 유지하고 있습니다. 이상한 점은 대기열이 한 번에 하나의 메시지 만 처리하도록 구성되어 있다는 것입니다. 그러나 실제적으로 CONVERSING 상태에서 두 가지 대화가 있습니다. 하나는 실제로 작업을하고 다른 하나는 걸린 것 같습니다.Service Broker 대화가 닫히지 않았습니다 (전환 중 상태 유지)

내가 사용하고있는 한 가지 사실은 일반적인 서비스 브로커 구현과 다른 단일 대기열과 서비스입니다 (대화 상자 대신 독백과 비슷해 짐). 내가 가진 활성화 SP 시작 했어 :

RECEIVE TOP(1) 
    @Handle = conversation_handle, 
    @MsgTypeName = message_type_name 
FROM [//MyQueue] 

IF (@@ROWCOUNT = 0) 
    RETURN 
ELSE IF ((@MsgTypeName is null) or (@Handle is null)) 
    RETURN 
ELSE IF (@MsgTypeName != '//MyRequest') 
    BEGIN 
     END CONVERSATION @Handle 
     RETURN 
    END 
+0

당신이 모든 것을 설정하는 데 사용했던 DDL 명령뿐만 아니라 좀 더 많은 코드를 제공하지 않으면 (당신이 비즈니스 로직에 대해 말하는 것이 아니라 브로커 관련 부분) 코드를 제공하지 않으면 도움이 될 것입니다. –

답변

0

"END 대화 '대화 핸들'CLEANUP 함께를;" 대화를 끝내는 라이트 방식이 아닙니다.

서비스 브로커는 대화를위한 것이지 대화를위한 것이 아닙니다. 그것은 또한 대화가 2 가지 이유입니다. (서비스가 다른 데이터베이스/인스턴스에 상주 할 수 있기 때문에 서비스를 받고 서비스를 받기 위해 보내기)

메시지를 보내고 받기 위해 마녀를 만들 수 있습니다. "대화 상자 끝내기"메시지와 대화 상자를 끝내면 다른 마녀는 메시지를 받고 작업이 끝나면 대화 상자를 끝내고 대화 상자를 끝냅니다.

2

당신이

을 시도 할 수 CLEANUP 함께

END 대화 '대화 핸들';

저는 과거에 서비스 중개인과 함께 일했습니다. 나는 당신에게 내가 서비스 브로커

http://www.mssqltips.com/tip.asp?tip=1197 http://blogs.msdn.com/b/sqlserverfaq/archive/2011/05/03/service-broker-concepts-and-을 위해 참조하는 데 사용되는 몇 가지 문제 해결 링크를 제공 할 것이다 troubleshooting.aspx

ssbdiagnose 유틸리티 - 사용 http://msdn.microsoft.com/en-us/library/bb934450.aspx

-1
ELSE IF (@MsgTypeName != '//MyRequest') 
    BEGIN 
     END CONVERSATION @Handle 
     RETURN 
    END 

안 좋은 생각. 이것을 시도하십시오 :

IF @MsgTypeName = '//MyRequest' 
BEGIN 
    /* Do something here with the message */ 
END 
ESLE IF @MsgTypeName = N'http://schemas.microsoft.com/SQL/ServiceBroker/EndDialog' 
BEGIN 
    END CONVERSATION @Handle 
END 
ELSE IF @MsgTypeName = N'http://schemas.microsoft.com/SQL/ServiceBroker/Error' 
BEGIN 
    END CONVERSATION @Handle 
    /* do some error reporting here */ 
END 

초 기자와 대상 모두 진정으로 끝내기 전에 대화를 끝내야한다는 것을 상기하십시오. 그리고 목표는 일반적으로 첫 번째 END 회신 메시지를 초 기자에게 다시 보내는 대상입니다. 이제 Initiator (위의 코드에서)는 들어오는 메시지 유형을 검사하고 그에 따라 행동해야합니다. 이것이 저장된 proc 파일에 싸여 있다면, 실제 응답 메세지와 종료 메세지의 양쪽 모두를받습니다.

관련 문제