讓外掛式配接器具現化
之前討論過,外掛式配接器不會由 BizTalk Server 具現化, 而是在另一個處理序中具現化及裝載。 配接器負責為IBTTransportProxy建立其傳輸 Proxy QueryInterface,然後呼叫IBTTransportProxy。RegisterIsolatedReceiver向傳訊引擎註冊。
註冊作業會要求配接器傳遞它的其中一個已設定及啟用的接收位置給傳訊引擎。 此配接器的主控件處理序認證必須是 BizTalk 外掛式主控件使用者群組的成員。 除非使用者為該群組的成員,否則在這裡單單使用模擬是不夠的。 此外,系統會查詢配接器,以確保其具有正確的 ClassID ,且正在針對該主機實例設定的電腦上執行。 配接器成功註冊其傳輸 Proxy 之後,其組態會透過呼叫 IPersistPropertyBag 介面的 Load 方法傳送至它。
下圖顯示 API 呼叫的順序。 藍色的介面是此配接器實作的介面。
下列程式碼片段說明註冊 API 呼叫:
using Microsoft.BizTalk.TransportProxy.Interop;
using Microsoft.BizTalk.Component.Interop;
using Microsoft.BizTalk.Message.Interop;
public class MyAdapter : IBTTransport,
IBTTransportConfig,
IBTTransportControl,
IBaseComponent
{
...
private IBTTransportProxy transportProxy;
public void Register(string uri)
{
// Create the Transport Proxy...
this.transportProxy =
(IBTTransportProxy)new BTTransportProxy();
// Register on of the adapters uri’s with the TP
this.transportProxy.RegisterIsolatedReceiver(
uri,
(IBTTransportConfig)this );
}
}
實作提示: 我們建議配接器保留進行中的工時計數。 配接器應該封鎖 Terminate ,直到訊息計數達到零為止。 在接收端,這項工作包含尚未發佈至 BizTalk Server 的任何未完成的要求。 呼叫 Terminate 之後,回應訊息不會傳遞至接收配接器。
對於傳送配接器而言,應該會以適當方式處理進行中的訊息。 這表示,已成功傳遞的任何訊息都應該從配接器的私用應用程式訊息佇列中刪除,以免將訊息傳送一次以上。
呼叫 Terminate 之後,傳訊引擎不接受發佈新訊息的要求,但要求-回應組的回應訊息除外。