다음을 통해 공유


BAM API(BizTalk Server 샘플)

BAM API 샘플은 BAM API 호출을 응용 프로그램에 통합하여 모니터링할 수 있는 키 정보를 저장하는 방법을 보여 줍니다.

이 샘플의 용도

이 샘플은 단순한 구매 시나리오를 구현합니다. 구매 주문서 생성, 각 구매 주문서의 처리, 배송 만들기, 송장 만들기 및 처리를 수행합니다. 샘플이 실행되면 BAM 작업을 만들고, 구매 주문서와 송장의 세부 정보 및 처리가 반영되도록 이를 업데이트합니다.

이 샘플이 디자인된 방식 및 이유

이 샘플은 BAM을 사용하여 BizTalk 오케스트레이션이 아닌 응용 프로그램에서 정보를 저장하는 방법을 보여 주기 위해 디자인되었습니다. 응용 프로그램은 단순하지만, 샘플은 다음과 같이 프로덕션 응용 프로그램에서 사용할 수 있는 여기에는 다음과 같은 옵션이 포함됩니다.

  • 단일 작업에 기여하는 여러 스레드

  • 두 작업 간 관계 만들기

  • 동일한 작업에 서로 다른 ID를 사용하여 액세스할 수 있게 하는 연속 사용

    BAM API 샘플은 구매 주문을 처리하는 클래스, 배송을 처리하는 클래스, 송장 처리의 세 가지 기본 클래스로 구성됩니다. 각 클래스에는 큐에서 메시지를 검색한 다음 메시지를 처리하는 RunOnce 메서드가 있습니다. 각 클래스에는 RunOnce 메서드를 지속적으로 호출하는 Run 메서드도 있습니다.

    PoApplication 클래스의 RunOnce 메서드는 다음을 수행합니다.

  1. 구매 주문서를 나타내는 XML 메시지를 만듭니다.

  2. BAMApiPo 작업을 시작하고 구매 주문서 및 구매 주문서의 수신 시점에 대한 작업 정보에 추가합니다.

  3. 구매 주문서를 임의로 승인하거나 거부합니다.

  4. BAMApiPo 작업을 업데이트하여 구매 주문서의 상태(승인됨 또는 거부됨)를 기록합니다.

  5. 구매 주문이 수락된 경우 RunOnce 메서드도 다음을 수행합니다.

    1. 배송할 패키지를 나타내는 XML 메시지를 만들고, 이 메시지를 배송 큐에 추가합니다.

    2. 구매 주문서를 나타내는 XML 메시지를 송장에 포함될 구매 주문서 큐에 추가합니다.

    3. BAMApiPo 작업에 대해 연속을 사용합니다.

    4. BAMApiPo 작업을 끝냅니다.

    ShipmentApplication 클래스의 RunOnce 메서드는 다음을 수행합니다.

  6. 배송할 패키지를 나타내는 XML 메시지를 큐에서 검색합니다.

  7. BAMApiPo 작업을 업데이트하여 패키지가 배송된 시간을 기록합니다.

  8. BAMApiPo 작업을 끝냅니다.

    InvoiceApplication 클래스의 RunOnce 메서드는 다음을 수행합니다.

  9. 송장 처리할 구매 주문서를 나타내는 XML 메시지를 큐에서 검색합니다.

  10. BAMApiInvoice 작업을 시작합니다.

  11. 송장 처리 중인 구매 주문서에 대해 BAMApiInvoice 작업과 BAMApiPo 작업 간에 BAM 관계를 만듭니다.

  12. 송장 및 송장이 만들어진 시간에 대한 BAMApiPo 작업 정보에 추가합니다.

  13. 결제할 송장에 대한 대기를 시뮬레이션하기 위한 임의 지연 후 BAMApiInvoice 작업 및 송장이 결제된 시간에 추가합니다.

  14. BAMApiInvoice 작업을 끝냅니다.

    MainApp 클래스의 Main 메서드는 애플리케이션을 초기화합니다. 메서드는 다음 작업을 수행합니다.

  15. DirectEventStream 개체를 만듭니다.

  16. 여러 스레드를 시작하고 각 스레드에서 POApplication 개체의 Run 메서드를 호출합니다.

  17. 여러 스레드를 시작하고 각 스레드에서 ShipmentApplication 개체의 Run 메서드를 호출합니다.

  18. 여러 스레드를 시작하고 각 스레드에서 InvoiceApplication 개체의 Run 메서드를 호출합니다.

    Global 클래스는 만들 스레드 수 및 거부할 구매 주문의 백분율과 같이 샘플 애플리케이션에서 사용하는 상수를 정의합니다.

    Visual Studio 솔루션 외에도 이 샘플에는 활동을 정의하는 Microsoft Excel 파일도 포함되어 있습니다.

이 샘플이 있는 위치

샘플 경로\BAM\BamApiSample에서 <이 샘플을 찾을 수 있습니다.>

다음 표는 이 샘플의 파일을 보여 주고 각각의 용도에 대해 설명합니다.

파일 Description
BamApiSample.cs 계측 응용 프로그램
BamApiSample.csproj 계측 응용 프로그램 프로젝트
BamApiSample.sln 계측 응용 프로그램 솔루션
BamApiSample.xls BAM 정의 스타일시트
Cleanup.bat 배포된 샘플 파일을 제거하는 배치 파일
Input.txt 샘플 인터셉터 구성 입력
InterceptorConfig.cs API 샘플에 대한 인터셉터 구성 코드
InterceptorConfig.csproj 인터셉터 구성 프로젝트
Invoice_config.xml 송장 인터셉터 구성
Invoice_interceptor.bin 일련 송장 인터셉터
PurchaseOrder_config.xml 구매 주문서 인터셉터 구성
PurchaseOrder_interceptor.bin 일련 구매 주문서 인터셉터
Setup.bat 샘플 파일을 배포 및 등록하는 배치 파일
Shipment_config.xml 배송 인터셉터 구성
Shipment_interceptor.bin 일련 배송 인터셉터

BAM API 샘플 실행

  1. 관리자 권한으로 명령 프롬프트를 열고 샘플 경로>\BAM\ BamApiSample\setup.bat 실행<합니다.

  2. 관리자 권한으로 Visual Studio를 <시작하고 샘플 경로>\BAM\ BamApiSample\BamApiSample.sln 솔루션을 엽니다.

    중요

    BamApiSample.cs 파일의 줄을 //#define Interceptor 주석으로 처리해야 합니다. 이 줄에서 "//"를 제거하지 마세요. BAM API 샘플은 전처리기 지시문 내에 #if Interceptor 없는 코드만 사용합니다.

  3. 솔루션을 빌드합니다.

  4. 샘플 경로>\BAM\BamApiSample\bin\debug\BamApiSample.exe 실행<합니다.

    출력은 다음과 유사합니다.

    ...  
    New Purchase Order #17 Received  
    8 was shipped as pkg#87  
    New Purchase Order #18 Received.  
    Shipping package pkg#87 via DHL  
    13 was Approved.  
    18 was Rejected.  
    17 was Rejected.  
    11 was shipped as pkg#114  
    16 wsas Rejected.  
    Shipping package pkg#114 via DHL  
    Invoice #5 send for {2 5 1 9 4 8 11 }  
    Package pkg#49 was delivered  
    New Purchase Order #19 Received.  
    ...  
    
  5. 약 1분 후에 CTRL+C를 누르거나 명령 프롬프트 창을 닫아 BamApiSample 프로그램을 중지합니다.

결과 보기

  1. SQL Server Management Studio를 엽니다.

  2. SQL Server Management Studio 서버를 확장하고 데이터베이스를 확장한 다음 BAMPrimaryImport를 확장한 다음 테이블을 확장합니다.

  3. dbo.bam_BAMApiInvoice_Active 마우스 오른쪽 단추 로 클릭한 다음 테이블 열기를 클릭합니다. SQL Server 사용하는 경우 상위 1,000개 행 선택을 클릭합니다.

    bam_BAMApiInvoice_Active 테이블의 내용이 오른쪽 창에 표시됩니다. 테이블의 각 행은 시작되었지만 완료되지 않은 BAMApiInvoice 작업을 나타냅니다.

  4. dbo.bam_BAMApiPo_Completed 마우스 오른쪽 단추 로 클릭한 다음 테이블 열기를 클릭합니다. SQL Server 사용하는 경우 상위 1000개 행 선택을 클릭합니다.

    bam_BAMApiPo_Completed 테이블의 내용이 오른쪽 창에 표시됩니다. 테이블의 각 행은 완료된 BAMApiPo 작업을 나타냅니다.