若要設定 WCF 攔截的 BAM,您必須修改攔截器配置檔案,以存取事件來源的適當元件清單。
當您設定事件時,您必須為動作指定正確格式化的 XPath 表達式。
您可以藉由啟用 WCF 追蹤和執行應用程式,以產生包含訊息的範例 WCF 記錄檔,以建立適當格式化的 XPath 表達式,以用於攔截器組態。 您可以使用 Microsoft 服務追蹤查看器 (SvcTraceViewer.exe) 來檢視記錄檔並擷取訊息。 查看器隨附於 WCF SDK 中。 然後,您可以根據訊息來形成所需的 XPath 運算式,並套用至攔截器組態。
設定 BAM WCF 攔截時,machine.config 檔案中使用的行為延伸模組必須符合接收位置自定義行為組態中使用的擴充功能。 變更 machine.config 檔案中已設定接收位置的擴展名名稱會導致無法載入行為。 此外,接收位置的設定UI將會失敗。
如果是叢集案例,因為自定義行為只會設定一次,因此您必須確定叢集中計算機上所有 machine.config 檔案都指定相同的擴展名。
若要設定指令清單
將攔截組態中 EventSource 中的指令清單設定為 'Microsoft.BizTalk.Adapter.Wcf.Runtime.ITwoWayAsyncVoid,Microsoft.BizTalk.Adapter.Wcf.Runtime,Version=3.0.1.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35'
備註
介面會根據所使用的服務/接收埠類型變更。 根據下表,變更指令清單行以反映您使用的埠類型。
埠類型 使用 雙向埠 ITwoWayAsync 具有綁定功能的單向埠,本質上是雙向的(例如 HTTP)。 ITwoWayAsyncVoid 具有系結的單向埠,本質上是兩種雙向交易。 ITwoWayAsyncVoidTxn 單向系結(例如 MSMQ)。 IOneWayAsync 系結是交易的一種方式。 IOneWayAsyncTxn 這很重要
在篩選中,請不要使用 GetOperationName 操作,改用如以下範例中所示的 XPath 操作。 針對泛型合約,所有訊息都會抵達一些泛型作業,此時會根據訊息本身 (Action 屬性) 路由傳送至特定作業。
此時作業名稱一律相同。 如果是 WCF 配接器(使用泛型合約),則所使用的方法是 BizTalkSubmit。 您可以使用動作節點的 XPath,而不是 GetOperationName 來擷取作業名稱。 然後,您可以篩選作業名稱。
範例攔截器組態
此範例顯示 WCF 配接器的 ServiceRequest 和 ServiceReply 使用量。 在醒目提示的區段中,動作上的 XPath 運算式是用來篩選作業,而不是使用 GetOperationName。 您也可以篩選回復,但僅限於 ITwoWayAsync 的情況。 所有其他介面都會傳回 nothing 或 void。
服務請求
<ic:OnEvent IsBegin="true" IsEnd ="false" Name ="WCFServiceRequest" Source="WCFService">
<ic:Filter>
<ic:Expression>
<wcf:Operation Name="GetServiceContractCallPoint"/>
<ic:Operation Name ="Constant">
<ic:Argument>ServiceRequest</ic:Argument>
</ic:Operation>
<ic:Operation Name ="Equals" />
<wcf:Operation Name ="XPath">
<wcf:Argument>//s:Header/a:Action</wcf:Argument>
</wcf:Operation>
<ic:Operation Name ="Constant">
<ic:Argument>Operation1</ic:Argument>
</ic:Operation>
<ic:Operation Name ="Equals" />
<ic:Operation Name ="And" />
</ic:Expression>
</ic:Filter>
<ic:CorrelationID>
<ic:Expression>
<wcf:Operation Name="AutoGenerateCorrelationToken"/>
</ic:Expression>
</ic:CorrelationID>
<ic:Update DataItemName ="Activity Date" Type ="DATETIME">
<ic:Expression>
<wcf:Operation Name ="GetContextProperty">
<wcf:Argument>EventTime</wcf:Argument>
</wcf:Operation>
</ic:Expression>
</ic:Update>
<ic:Update DataItemName ="Source" Type ="NVARCHAR">
<ic:Expression>
<ic:Operation Name="Constant">
<ic:Argument>WcfAdapter_ServiceRequest</ic:Argument>
</ic:Operation>
</ic:Expression>
</ic:Update>
</ic:OnEvent>
ServiceReply
<ic:OnEvent IsBegin="true" IsEnd ="false" Name ="WCFServiceReply" Source="WCFService">
<ic:Filter>
<ic:Expression>
<wcf:Operation Name="GetServiceContractCallPoint"/>
<ic:Operation Name ="Constant">
<ic:Argument>ServiceReply</ic:Argument>
</ic:Operation>
<ic:Operation Name ="Equals" />
</ic:Expression>
</ic:Filter>
<ic:CorrelationID>
<ic:Expression>
<wcf:Operation Name="AutoGenerateCorrelationToken"/>
</ic:Expression>
</ic:CorrelationID>
<ic:Update DataItemName ="Activity Date" Type ="DATETIME">
<ic:Expression>
<wcf:Operation Name ="GetContextProperty">
<wcf:Argument>EventTime</wcf:Argument>
</wcf:Operation>
</ic:Expression>
</ic:Update>
<ic:Update DataItemName ="Name" Type ="NVARCHAR">
<ic:Expression>
<ic:Operation Name="Constant">
<ic:Argument>WcfAdapter_ServiceReply</ic:Argument>
</ic:Operation>
</ic:Expression>
</ic:Update>
</ic:OnEvent>