다음을 통해 공유


식을 사용하여 동적으로 메시지를 변환하는 방법

오케스트레이션에서는 식을 사용하여 동적으로 메시지를 변환할 수 있습니다. XLANG은 생성 메시지 셰이프 내의 메시지 할당 셰이프 내에서 호출할 수 있는 변환 메서드를 노출합니다. 변환 셰이프를 사용할 때 호출되는 메서드와 동일하지만 오케스트레이션 내에서 지정한 맵을 사용하여 메시지를 프로그래밍 방식으로 변환할 수 있습니다. 이는 유형과 관계 없는 메시지 처리를 수행할 때 유용합니다. 예를 들어 일련의 맵에서 선택하여 받은 인바운드 메시지가 제공하는 매개 변수를 기반으로 인바운드 메시지를 변환해야 하는 비즈니스 프로세스가 있는 경우 전체 비즈니스 프로세스를 그대로 유지하면서 Expression 셰이프의 변환 메서드를 사용하여 이 작업을 수행할 수 있습니다.

메시지 변환

다음 샘플 코드를 사용하여 메시지 할당 셰이프에서 메시지를 프로그래밍 방식으로 변환할 수 있습니다.

MyMapType = typeof(MyMapName);  
transform(MyOutputMsg) = MyMapType(MyInputMsg);  

이 예제에서 MyMapType은 오케스트레이션에서 System.Type 형식의 변수로 선언됩니다. MyMapName은 BizTalk 프로젝트에서 만든 맵의 이름입니다. 별도 BizTalk 어셈블리에 있는 맵을 참조하려면 BizTalk 프로젝트에서 해당 어셈블리를 참조해야 합니다. MyInputMsg는 소스 메시지이고 MyOutputMsg는 대상 메시지입니다. 맵에서 여러 개의 소스 메시지를 사용하는 경우 다음 샘플 코드를 사용하여 메시지를 변환할 수 있습니다.

MyMapType = typeof(MyMapName);  
transform(MyOutputMsg) = MyMapType(MyInputMsg1, MyInputMsg2);  

참고

여러 개의 소스 메시지가 있을 경우 맵에 표시된 입력 메시지 파트 번호와 관련해서 식에 순서대로 배치해야 합니다.

중요

Expression 셰이프의 메시지를 동적으로 변환하는 경우 사용자 코드에서 컴파일된 맵을 캐싱할 캐시를 작성한 다음 Expression 셰이프에서 이 캐시를 사용하여 메시지 변환 전에 맵을 검색하는 것이 좋습니다. 맵을 캐싱하지 않으면 CLR(공용 언어 런타임) 메모리가 매우 커질 수 있습니다. 동적 매핑을 사용하려면 .NET 런타임에서 코드 액세스 검사를 수행해야 합니다. 이 경우 각 변환에 대한 Large Object Heap에 .NET Evidence 개체가 배치되고 오케스트레이션이 완료될 때까지 이 개체가 삭제되지 않습니다. 따라서 이러한 유형의 많은 변환이 동시에 수행되는 경우 메모리 사용량이 대폭 증가하고 메모리 부족 예외가 발생할 수도 있습니다.

참고 항목

오케스트레이션 셰이프
BizTalk 맵 편집기를 사용하여 맵 만들기