2016-07-18 2 views
0

네트워크를 통해 두 서버간에 SQL Service Broker를 설정했는데 문제가 없습니다. 나는 현재 오류 처리를 구현하고있다. 메시지를 처리하기 위해 두 대기열에 첨부 된 프로 시저를 저장했습니다.MSSQL Service Broker 보낸 사람 측 오류 메시지 인식

잘못된 형식의 XML을 보내려고 할 때와 같이 메시지를 보낼 수없는 경우 메시지가 보낸 사람 큐에 남아 있습니다. 전송 상태는

입니다. Service Broker는이 대화에 대해 오류 메시지를 받았습니다. 서비스 브로커는 메시지를 전송하지 않습니다. 응용 프로그램이 대화를 종료 할 때까지 개최됩니다.

큐 질의

is_conversation_erroris_end_of_dialog 필드 0하고 message_type_name 대신 통상의 오류 유형에 보낼 때 I 사용 동일 select * from sys.transmission_queue로 (프로 시저를 디버깅 오프).

대기열에서 이러한 메시지를 인식하는 방법이 있습니까? 자동 발신인 대기열에서이 메일을 현재 정상적인 메일로 처리하고 있습니다.

+0

대신 계약에서 메시지 유효성 검사를 사용 중지하고 수신 측에서 메시지를 처리 ​​할 때 xml로 메시지를 전송할 수없는 경우이를 오류 메시지 테이블로 집어 넣을 수 있습니다. –

+0

실제로 재미 있습니다, 나는 'Validation = None'을 가지고 있지만 여전히 XML을 확인하는 것으로 보인다. – milez

+0

이상한. 계약이 양측 (즉, 개시 자와 대상)에서 그렇게 보입니까? –

답변

1

잘못된 XML 오류로 인해 대화 상자에 오류 메시지가 다시 전송됩니다. 이것은 대기열의 모든 오류 메시지를 처리해야하므로 응용 프로그램 대기열에 대기열에 포함되며 응용 프로그램에서 처리해야합니다.

발신자 보낸 사람 큐를 transmission_queue과 혼동한다는 것을 유의하십시오. 보낸 사람 큐는 CREATE QUEUE으로 만든 일반 큐이며 보내는 서비스와 관련된 큐입니다. 내가 말하는 오류 메시지는 발신자 대기열에 보관되며 RECEIVE으로 가져올 수 있습니다. transmission_queue은 배달 대기중인 메시지가 포함 된 시스템 소유의 내부 테이블입니다. transmission_queue에서 RECEIVE을 사용할 수 없습니다.

귀하의 게시물에서 판단 해 주시면 귀하의 신청서가 발신자 대기열에있는 메시지를 처리하지 못하는 것 같습니다. 논리적 메시지 흐름이 항상 서비스 'A'에서 서비스 'B'로 진행되는 경우에도 에 'A'서비스 대기열에 대한 메시지 처리가 있어야합니다. 그 밖의 것이 없다면, 오류 처리에 필요합니다.

+0

대기열을 혼란스럽게하는 큰 포인트! 요청에 대한 응답을 받기위한 발신자 대기열의 절차가 있습니다 (A - B - A 방식). 내일 다시 일할 때 문제를 해결할 수 있는지, 답변을 주셔서 감사합니다. – milez

+0

네, 잘못된 대기열을보고 있었으므로 오류 상태와 함께 발신자 대기열에있었습니다. 고맙습니다! – milez

관련 문제