共用方式為


何謂 BAM 攔截器?

概觀

BAM 攔截器是可讓您檢測應用程式以擷取感興趣的資料的物件。 下圖顯示 BAM 攔截器的角色以及與其他 BAM 元件的互動:

顯示 BAM 攔截器角色及其與其他 BAM 元件的互動的影像。
BAM 攔截器

在可能有感興趣資料的每個應用程式步驟中,您呼叫攔截器 OnStep、提供步驟的識別碼,以及提供您在應用程式中使用的某些資料或任意物件。

您必須實作回呼函式,如此,當回呼發生時,回呼程序便會取得目前的步驟識別碼和資料物件。 基本上 BAM 攔截器只是將資料物件傳播至回呼。 擷取資料的實際邏輯存在於應用程式中。 例如,如果資料使用 XML 訊息的形式,則回呼將使用 XPath。 如需 XPaths 的詳細資訊,請參閱 在訊息指派中使用 XPaths

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)  
...  

其中:

  • recvPOapprovePO 是您用來識別應用程式中步驟的任意物件。

  • data1data2 是您在該時間點擁有的任意物件,而且可能包含有趣的資料,例如採購單的 XML 檔。

  • es 是 DirectEventStream 或 BufferedEvent 資料流程,視您的效能需求而定。

  • callback 是 的實作 IBAMDataExtractor Interface

    SDK 範例 BAM API (BizTalk Server 範例) 示範如何使用攔截器,其中包含組態工具和範例執行時間應用程式。

    BizTalk 協調流程引擎會配合攔截,以允許在執行階段使用追蹤設定檔編輯器變更為 BAM 收集的資料。

本節內容

另請參閱

BAM API (BizTalk Server 範例)