パイプライン インターフェイスの使用
パイプライン コンポーネントは、BizTalk メッセージング エンジンとの対話用にあらかじめ定義された一連のインターフェイスを実装する .NET コンポーネントまたは COM コンポーネントです。 実装する必要のあるインターフェイスは、コンポーネントの機能によって異なります。 このトピックでは、これらのインターフェイスとそのメソッドの一部について説明します。
警告
COM を使用してカスタム パイプライン コンポーネントを作成する場合は、マルチスレッド アパートメント (MTA) モデルを使用するようにコンポーネントを構成する必要があります。 この構成を行わないと、コンポーネントの呼び出しは失敗し、E_NOINTERFACE エラーが返されます。
IPipelineContext
すべてのパイプライン コンポーネントは 、IPipelineContext メソッドを使用して、すべてのドキュメント処理固有のインターフェイスにアクセスできます。 IPipelineContext インターフェイスには、次の機能があります。
アンビエント パイプラインとステージの設定をコンポーネントで取得できるようにします。
メッセージとメッセージ ファクトリをコンポーネントで取得できるようにします。 コンポーネントでこれらのファクトリを使用することにより、コンポーネントの実行に必要なさまざまなオブジェクトを作成することができます。
ドキュメント仕様をコンポーネントで取得できるようにします。 ドキュメント仕様とは、XSD スキーマに注釈を加えたものを指します。
IBaseComponent
コンポーネントの基本情報を指定するために、すべてのパイプライン コンポーネントに実装する必要のあるインターフェイスです。
IComponent
処理するメッセージを BizTalk Server エンジンから取得し、処理されたメッセージをエンジンに返すために、アセンブラーと逆アセンブラーを除くすべてのパイプライン コンポーネントに実装されるインターフェイスです。
Execute という 1 つのメソッドのみが含まれます。 入力メッセージをコンポーネントに渡し、処理されたメッセージをコンポーネントから取得するために、エンジンによって呼び出されるメソッドです。
IPropertyBag、IPersistPropertyBag
パイプライン コンポーネントは、構成情報を受け取るために IPersistPropertyBag を 実装する必要があります。 このインターフェイスと IPropertyBag が標準インターフェイスです。 これらのインターフェイスの詳細については、Microsoft .NET Framework ソフトウェア開発キット (SDK) のドキュメントを参照してください。
IDisassemblerComponent
逆アセンブラー コンポーネントは、入力時に 1 通のメッセージを受け取り、出力時に 0 通以上のメッセージを生成するパイプライン コンポーネントです。 逆アセンブラー コンポーネントは、メッセージのインターチェンジを個別のドキュメントに分割するために使用されます。 逆アセンブラー コンポーネントは、IDisassemblerComponent インターフェイスのメソッドを実装して、処理のためにBizTalk Serverからメッセージを取得し、逆アセンブリされたドキュメントをBizTalk Serverに渡す必要があります。
メソッド | 説明 |
---|---|
逆アセンブル | 受信ドキュメント pInMsg の逆アセンブルを実行します。 |
GetNext | 逆アセンブラーを実行して生成されたメッセージ セットから次のメッセージを取得します。 これ以上メッセージがない場合は NULL を 返します。 |
回復可能なインターチェンジ処理をサポートする逆アセンブラー コンポーネントを記述する場合は、次の作業を行う必要があります。
入力ストリームを VirtualStream() でラップすることによって、シークできるようにします。
GetNext() 内に、メッセージに問題があるかどうかを判断するロジックを記述します。 メッセージに問題がある場合は、BTS.MessageDestination = "SuspendQueue" と設定して GetNext() でそのメッセージを返します。
メッセージに問題がない場合は、BTS.SuspendMessageOnRoutingFailure = True と設定して GetNext() でメッセージを返します。
IAssemblerComponent
アセンブラー コンポーネントは、入力時に複数のメッセージを受け取り、出力時に 1 通のメッセージを生成するパイプライン コンポーネントです。 アセンブラー コンポーネントは、個別のドキュメントをまとめてメッセージ インターチェンジのバッチを作成するために使用されます。
Note
このリリースのBizTalk Serverでは、アセンブリ機能は使用されないため、BizTalk Serverは常に 1 つのドキュメントをコンポーネント入力に渡します。
アセンブラー コンポーネントは、実行時にBizTalk Server エンジンによって呼び出される IAssemblerComponent メソッドを実装します。
メソッド | 説明 |
---|---|
AddDocument | インターチェンジに含まれるメッセージの一覧にドキュメント pInMsg を追加します。 |
アセンブル | 前のメソッドによって追加されたメッセージからインターチェンジを構築します。 アセンブルされたメッセージへのポインターを返します。 |
IProbeMessage
メッセージ プローブ機能が必要な場合は、パイプライン コンポーネント (全般、アセンブリ、または逆アセンブリ) で IProbeMessage を実装できます。 プローブ コンポーネントは、 FirstMatch 実行モードのパイプライン ステージで使用されます。 このような段階では、BizTalk Serverはコンポーネントにメッセージを渡し、Probe メソッドはメッセージの先頭を調べて、コンポーネントがメッセージの形式を認識するかどうかを判断します。
メソッド | 説明 |
---|---|
プローブ | このメソッドは pInMsg メッセージを受け取り、形式が認識される場合は True 、それ以外の場合は False を 返します。 |
INamedItem
マネージド コードおよびアンマネージド コードからドキュメント スキーマにアクセスするためのヘルパー インターフェイスです。
INamedItemList
マネージド コードおよびアンマネージド コードからドキュメント スキーマにアクセスするためのヘルパー インターフェイスです。
IDocumentSpec
パイプライン コンポーネントでは、 IDocumentSpec インターフェイスのメソッドを使用して、コンテンツ プロパティをコンテキストとバックに移動したり、ドキュメント スキーマにアクセスしたりなど、ドキュメント固有のアクションを実行できます。
メソッド | 説明 |
---|---|
DocType | 現在のドキュメントの型を返します。 |
DocSpecName | 現在のドキュメントの仕様名を返します。 |
GetSchemaCollection | 現在のドキュメントのドキュメント スキーマの一覧を返します。 |
GetBodyPath | ボディ部が開始されるドキュメント内ノードへの XPath を返します。 |
GetDistinguishedPropertyAnnotationEnumerator | すべての識別フィールド プロパティ注釈のディクショナリ列挙子を返します。 |
GetPropertyAnnotationEnumerator | すべてのプロパティ注釈の列挙子を返します。 |
IComponentUI
パイプライン コンポーネントをパイプライン デザイナー環境で使用できるようにするには、このインターフェイスを実装する必要があります。
メソッド | 説明 |
---|---|
アイコン | このコンポーネントに関連付けられたアイコンを指定します。 |
検証 | パイプライン デザイナーは、パイプラインのコンパイル前にこのメソッドを呼び出して、すべての構成プロパティが正しく設定されていることを確認します。 |
Icon プロパティは IntPtr を返します。 次の C# の例は、 IntPtr を返す方法を示しています。
static ResourceManager resManager = new ResourceManager("ResourceManager", Assembly.GetExecutingAssembly());
...
[Browsable(false)]
public IntPtr Icon
{
get
{
return ((Bitmap)resManager.GetObject("MyIcon")).GetHicon();
}
}
詳細については、UI ガイダンスと開発者 API 名前空間リファレンスの「IComponentUI インターフェイス (COM)」を参照してください。
参照
カスタム パイプライン コンポーネントの開発
CustomComponent (BizTalk Server サンプル)