Aaron H. Kim Fearless Integration Maniac

[TroubleShooting] BizTalk 메시지의 라우팅 실패시 확인할 사항.


BizTalk을 사용하면서 발생나기 쉬운 에러들에 대해 정리해두고자 합니다.
저의 경우 한가할 땐 전에 발생한 에러가 다시 일어났을 경우 단박에 기억이 나는데..
정작 급할땐 오히려 기억도 안나고 해서 필요보다 한참을 버벅거리는 경우가 생기더군요.

이번에 다룰 내용은 메시지를 수신받았는데 수신받은 메시지의 라우팅을 실패했을 경우입니다.
여러가지 상황이 나올 수 있지만, 이번에는 양방향 송수신 포트에서,
타겟 시스템에 메시지 송신 후(Request) 수신받을 때(Response) 발생하는 에러의 경우입니다.

에러 메시지는 다음과 같은 형태입니다.

Received unexpected message type ” does not match expected type
‘http://schemas.microsoft.com/BizTalk/2003/TKERP31#Z_CFI_REF_IOK_RESULT_BUDGET_Response’ 에러 메시지에 친절하게도 원래 받아야 할 메시지 타입은 A 인데 정작 받은건 B 더라라고 알려줄 수 있는 이유는 네, 당연히 해당 포트가 양방향 포트이기 때문입니다.

단방향 수신 포트의 경우라면 일단 수신받은 메시지를 일단 MessageBox에 저장하고 나서
이 메시지에 가입한 Subscriber를 찾을 수 없다라고 에러를 출력하겠지요.

이런 경우 확인하셔야 하는건 해당 송수신 포트의 PipeLine이 되겠습니다.
BizTalk의 송수신 포트에 설정해둔 특정 PipeLine 값은 여러분이 필요에 의해 여러 BizTalk Artifacts를
재배포하다보면 원래의 값이 아닌 Passthru로 초기화 되어버리는 경우가 종종 발생합니다.

위 에러 메시지에서 message type ” 라고 인식하는 이유도 수신 위치의 PipeLine이 Passthru로
초기화 되어 버렸기 때문입니다. 메시지로부터 메시지 타입(TargetNamespace + # + RootName)
을 인식해서 Promotion해주는 역할을 Xml disassembler에서 해주는데 받은 메시지를 그대로 전달하는
Passthru의 경우 당연히 이 메시지 타입 Property에 아무값도 넣어주지 않으므로 공백으로 인식하는 것이지요.

따라서 위 에러 발생시 송수신 포트의 파이프라인을 Xml disassembler가 포함된 기본 제공 PipeLine인
XMLReceive PipeLine 또는 PipeLine Designer를 통해 Xml disassembler를 포함시킨 Custom PipeLine,
혹은 Custom PipeLine Component에서 직접 Disassemble 함수를 구현하여(Promotion 포함) 컴파일한 후
포함시킨 PipeLine을 지정해주시면 해결 됩니다.

여기서 중요한 건 해당 에러 해결이 아니라, Xml disassembler 의 역할을 이해하는 것이 되겠습니다.


Similar Posts

Comments