質問

正しい質問をしたのかわかりませんが、実行しようとしているシナリオは次のとおりです。

複数のファイル (XML といくつかの関連ファイル、「添付ファイル」) を 1 つのメッセージとして BizTalk に取り込む必要があります。既存のアダプターを調べましたが、既存のアダプターでそれが行われたことがわかりません。より正確には、ファイルはファイル システムから取得されます。ファイルは同時に検出されるのではなく、順序が保証されていない場合、一度に 1 つずつ到着します。XML (コンテンツ) ファイルは、どのような添付ファイルが必要か (他のファイルが何であるか) を知っています。

私たちは BizTalk 2009 を検討していますが、その責任はカスタム アダプターか何か他のものにあるのかと疑問に思っていました。そして、サンプルを探すことができましたか?

ありがとう。

役に立ちましたか?

解決

おそらくカスタム アダプターを使用して希望することを行うことは可能ですが、私はそれをお勧めしません。オーケストレーションを使用すると、必要なことを実現できます。

あなたが探しているのは護送船団のようなもの、または少なくとも相関関係の使用です。

BizTalk では、コンボイは、メッセージのグループを単一のオーケストレーションで処理できるようにするメッセージング パターン (BizTalk 機能とは対照的) です。

基本的に、受信ポートで相関関係を使用して、メッセージを並列 (おそらく必要な方法) または順次の方法でグループ化します。

記事があります[こちら](http://msdn.microsoft.com/en-us/library/ms942189(BTS.10).aspx) スティーブン W.Thomas はコンボイについて (BT 2004 用ですが、その概念はまだ有効です)、Web や書籍には多くの追加情報があります (Professional BizTalk サーバー 2006 にはそれらに関するサブセクションがあります)。

シナリオの詳細がなければ、コンボイがどのように構築されるかを正確に知ることは困難ですが、以下に検討すべき 2 つのアプローチを示します (また、BT2009 を適切に使用する機会がなかったので、相関シナリオのサポートが拡張される可能性があります)。手伝ってください)。

柔軟な相関関係

コンテキスト XML にリストされているファイルについて何も知らない場合は、Charles Young によって説明されているようなパターンが必要になるでしょう。 これ 役職。

不均一なシーケンシャルコンボイ

事前に少しの情報がある場合、1 つの方法は次のようになります (基本的には不均一な順次コンボイ)。

これは、ファイルを相互に関連付けることができるように、すべてのファイルをリンクする何らかの方法があることを前提としています。

受信受信ポート (ファイル受信場所を含む) をサブスクライブする単一のオーケストレーションを作成します。

このオーケストレーションには、コンテンツ ファイル用に設定された単一のアクティベーション受信シェイプが含まれます。

コンテンツ ファイルによってオーケストレーションが開始されると、2 番目の相関受信シェイプが、そのコンテンツ ファイルに一致するメッセージの取得を開始します。(この 2 番目の受信は、可変数のファイルを許可するためにループ内にある可能性があります)

次に、それらをすべてデザインの 1 つの送信ファイルにまとめて、全数のファイルを受信したら送信します。

他のヒント

より良いアプローチは、カスタムパイプラインコンポーネントおよび/またはカスタムアダプタの組み合わせで上記の要件を実装することであろう私には思えます。コンテンツXMLファイルを除いて - - またはあなたは、彼らがバイナリ形式であるため、できなかったことを私はあなたが本当に入ってくるファイルを操作する必要はありませんと仮定します。これは、カスタムパイプラインコンポーネントのために呼び出します。

あなたはどうすることができ、ファイルシステムと対話するためのカスタムのBizTalkアダプターを開発し、リスニングやループロジックを実装することです。次は、バイナリデータのためにその中にbase64でデータ型で、おそらく単一のBizTalkメッセージを作成するために、カスタムパイプラインコンポーネントを開発することができます。また、あなたはまた、オーケストレーションのサブスクリプションを有効にするには、右、このコンポーネントでメッセージを推進することができます。

オーケストレーションは、メッセージがXML形式に既にあるビジネスワークフローシナリオを実装するための、より適しています。これはケースのように表示されません。いずれにせよ、私は非常に少なくとも、カスタムパイプラインコンポーネントが必要とされるであろうと思います。

デビッドの答えが正解です。

予期される添付ファイルの内容についてまったく知らない場合でも、その名前と場所は確実に知っています。したがって、使用できます 柔軟な相関関係 デビッドの回答では次のようにリンクされています。

解決策の鍵は、組み込みの BTS.ReceivedFileName プロパティを関連付けることです。

まず、受信メッセージの BTS.ReceivedFileName コンテキスト プロパティをプロモートするカスタム パイプライン コンポーネントを使用して、カスタム受信パイプラインを作成します。この単純なカスタム コンポーネントは非常に簡単に作成できますが、次のようなサードパーティ フレームワークを使用すると簡単に作成できます。恥知らずなプラグ、ここに) 私の パイプラインコンポーネントベース クラスまたは優秀な BizTalk Server パイプライン コンポーネント ウィザード.

ここからは簡単な部分です。

  • 添付ファイルは、ファイルシステム上のパスで指定された特定の場所で受信されます。
  • をリッスンする受信場所を作成します。 別の場所, 、ファイルが実際に BizTalk に飲み込まれるタイミングを制御するためにのみ使用されます。
  • オーケストレーションで、BTS.ReceivedFileName プロパティを使用して相関タイプを作成し、この相関タイプに基づいて相関セットを作成します。
  • バイナリ添付ファイルを受信する場合は、BTS.ReceivedFileName コンテキスト プロパティをバイナリ添付ファイルのファイル名に設定し、パスが一致するダミー メッセージを送信します。 代替の場所 ;受信場所で使用されるもの。送信形状の相関関係を初期化します。
  • 式シェイプを使用して、バイナリ ファイルを元の場所から受信場所で使用される場所にコピーします。
  • 最後に、カスタム受信パイプラインが BTS.ReceivedFileName プロパティをプロモートする受信場所を含む受信ポートにバインドされた受信形状を使用します。

相関関係を初期化するには、実際にメッセージを送信する必要があることに注意してください。実際にどのようなメッセージを送信するかは関係ありません。私がやるべきことは、 空の パイプラインコンポーネント。これは、メッセージを読み取りますが、null を返すパイプライン コンポーネントです (メッセージはアダプターに到達する前に消えてしまいます)。より複雑な解決策は、 ヌル アダプタ。これは、メッセージを読み取るだけで、それに対して何も実行しないアダプターです。

これら 2 つのソリューションは、相関関係を初期化するためだけに、多くのファイルが一時的な場所に蓄積されることを回避します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top