개요
BAM 인터셉터(BAM Interceptor)는 애플리케이션을 계측하여 관심 있는 데이터를 캡처할 수 있는 개체입니다. 다음 다이어그램에서는 BAM 인터셉터의 역할과 다른 BAM 구성 요소와의 상호 작용을 보여 줍니다.
BAM 인터셉터
관심 있는 데이터를 가질 수 있는 애플리케이션의 각 단계에서 Interceptor OnStep을 호출하고, 단계에 대한 식별자를 제공하고, 애플리케이션에서 사용 중인 일부 데이터 또는 임의의 개체를 제공합니다.
콜백이 발생할 때 콜백 프로시저가 현재 단계 ID 및 데이터 개체를 가져오도록 콜백 함수를 구현해야 합니다. 기본적으로 BAM 인터셉터에서는 단순히 데이터 개체를 콜백으로 전파합니다. 데이터 추출의 실제 논리는 애플리케이션에 상주합니다. 예를 들어 데이터가 XML 메시지 형식을 사용하는 경우 콜백은 XPaths를 사용합니다. XPath에 대한 자세한 내용은 메시지 할당에서 XPath 사용을 참조하세요.
BAM 인터셉터에서는 프로그래밍 방식으로 만들 수 있는 구성에 따라 각 단계에서 요청할 데이터를 결정합니다. 그런 다음 BAM 인터셉터에서는 가져온 데이터를 사용하여 DirectEventStream 또는 BufferedEventStream을 호출합니다. 이 데이터를 계속 유지하고 매번 OnStep에 인수로 전달해야 합니다.
각 단계에 대한 인터셉터를 호출하는 것은 리소스를 많이 사용하는 작업이 아닙니다. 호출하고 이 단계에 아무것도 등록하지 않으면 인터셉터는 즉시 반환합니다. 즉, 디스크 작업도 없고 트랜잭션도 없고 메모리 할당도 없으므로 성능에 거의 영향을 주지 않습니다. 동시에 필요한 경우 BAM에 대한 데이터를 추출할 수 있습니다. 데이터 추출 및 데이터 가용성과 관련된 단계에 대한 성능 영향은 구현에 IBAMDataExtractor Interface
따라 달라집니다.
다음 코드 예제에서는 구성 및 런타임 동안 인터셉터를 사용하는 방법을 보여 줍니다.
구성 시간
다음 코드에서는 애플리케이션의 단계 recvPO에서 중지하도록 인터셉터를 구성하고 고객 이름 및 고객 SSN을 요청하는 방법을 보여 줍니다.
ActivityInterceptorConfiguration cfg= new ActivityInterceptorConfiguration ("PurchaseOrder");
...
cfg.RegisterDataExtraction("CustomerName",recvPO,XpathName);
cfg.RegisterDataExtraction("CustomerSSN",recvPO,XpathSSN);
...
BAMInterceptor interceptor=new BAMInterceptor();
cfg.UpdateInterceptor(interceptor);
...
// The interceptor instance is ready.
인터셉터 인스턴스를 만든 후 런타임에 나중에 사용할 수 있는 인터셉터 인스턴스를 저장할 수 있습니다.
BAM의 데이터 및 마일스톤에 대해 서로 다른 기본 설정을 나타내는 다른 미리 생성된 인터셉터를 유지할 수 있습니다. 최상의 성능을 위해 BinaryFormatter 클래스를 사용하여 인터셉터 인스턴스를 직렬화합니다.
실행 시간
프로덕션 환경에서 런타임에 인터셉터를 사용하려면 다음 코드를 사용합니다.
// Deserialize the Interceptor that was prepared before
...
es=new DirectEventStream(...)
...
Interceptor.OnStep(recvPO, data1, es, callback)
...
Interceptor.OnStep(approvePO, data2, es, callback)
...
위치:
recvPO 및 approvePO 는 애플리케이션의 단계를 식별하는 데 사용하는 임의의 개체입니다.
data1 및 data2 는 해당 시점에 있는 임의의 개체이며 흥미로운 데이터(예: 구매 주문의 XML 문서)를 포함할 수 있습니다.
es 는 성능 요구 사항에 따라 DirectEventStream 또는 BufferedEvent 스트림입니다.
콜백은
IBAMDataExtractor Interface
의 구현입니다.SDK 샘플 BAM API(BizTalk Server 샘플)는 구성 도구와 예제 런타임 애플리케이션을 모두 포함하는 인터셉터를 사용하는 방법을 보여 줍니다.
BizTalk 오케스트레이션 엔진은 가로채기를 수용하므로 추적 프로필 편집기를 사용하여 런타임에 BAM에 대해 수집되는 데이터를 변경할 수 있습니다.