分離アダプターのインスタンス化
分離アダプターは BizTalk Server によってインスタンス化されません。 代わりに、別のプロセスでインスタンス化され、ホストされます。 アダプターは、IBTTransportProxy のトランスポート プロキシ QueryInterface を作成し、IBTTransportProxy を呼び出す必要があります。メッセージング エンジンに登録する RegisterIsolatedReceiver。
登録には、構成済みで有効になっている受信場所の 1 つをアダプターからメッセージ エンジンに渡す必要があります。 アダプターのホスト プロセスの資格情報は、BizTalk 分離ホスト ユーザー グループのメンバーである必要があります。 ここで単に権限借用を使用しても、ユーザーがそのグループのメンバーでなければ不十分です。 さらに、アダプターが正しい ClassID を持ち、そのホスト インスタンス用に構成されたコンピューターで実行されていることを確認するために、アダプターに対してクエリが実行されます。 アダプターがトランスポート プロキシに正常に登録されると、 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 );
}
}
実装のヒント: アダプターでは、進行中の作業の数を保持することをお勧めします。 メッセージ数が 0 に達するまで、アダプターは Terminate をブロックする必要があります。 受信側では、BizTalk Server に対して公開されていない未処理の要求がこの作業に含まれます。 Terminate が呼び出された後、応答メッセージは受信アダプターに配信されません。
送信アダプターでは、処理中のメッセージが適切に処理される必要があります。 つまり、正常に配信されたメッセージをアダプターのプライベート アプリケーション メッセージ キューから削除して、メッセージが 2 回以上送信されるのを防ぐ必要があります。
Terminate が呼び出されると、メッセージング エンジンは、送信請求と応答のペアの応答メッセージを除き、新しいメッセージを発行する要求を受け入れません。