何謂 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)
...
其中:
recvPO 和 approvePO 是您用來識別應用程式中步驟的任意物件。
data1 和 data2 是您在該時間點擁有的任意物件,而且可能包含有趣的資料,例如採購單的 XML 檔。
es 是 DirectEventStream 或 BufferedEvent 資料流程,視您的效能需求而定。
callback 是 的實作
IBAMDataExtractor Interface
。SDK 範例 BAM API (BizTalk Server 範例) 示範如何使用攔截器,其中包含組態工具和範例執行時間應用程式。
BizTalk 協調流程引擎會配合攔截,以允許在執行階段使用追蹤設定檔編輯器變更為 BAM 收集的資料。