1

現在、着信メッセージを分割する必要がある BizTalk の実装に取り​​組んでいます。これまでのところ、着信メッセージの子ノードごとに 1 つのメッセージを作成するエンベロープ スキーマを使用する例を見つけることができました。

しかし、私が受け取ったメッセージでは、それだけでは十分ではありません。同じ識別子を持つすべての子レコードが 1 つのメッセージになるように、メッセージを分割する必要があります。

簡単に言うと、受信メッセージは次のようになります。

<Root>
    <Child>
        <ID>1</ID>
    </Child>
    <Child>
        <ID>1</ID>
    </Child>
    <Child>
        <ID>2</ID>
    </Child>
    <Child>
        <ID>2</ID>
    </Child>
</Root>

ただし、明らかに単なる ID よりも多くのデータが含まれています。私が望むのは、これを同じ構造に分割することですが、ID ごとに 1 つのメッセージを生成するため、結果は次のようになります。

メッセージ 1

<Root>
    <Child>
        <ID>1</ID>
    </Child>
    <Child>
        <ID>1</ID>
    </Child>
</Root>

メッセージ 2

<Root>
    <Child>
        <ID>2</ID>
    </Child>
    <Child>
        <ID>2</ID>
    </Child>
</Root>

これに加えて、ID が段階的に続くかどうかはわかりませんが、メッセージ全体でスクランブルされる可能性があります。また、ID の最小または最大オカレンスもありません。1人かもしれないし、50人かもしれない。

したがって、私の質問は次のとおりです。これを可能な限り最善の方法で解決するにはどうすればよいですか? このような「高度な」デバッチ手順にエンベロープを使用できますか?カスタム パイプライン コンポーネントを作成する必要がありますか?それとも他に秘密がありますか? ;)

前もって感謝します!

4

3 に答える 3

2

これは封筒があなたのためにできることを超えていると思います. これは、パイプライン コンポーネントで行うことができます。

必要なメッセージをそれぞれ作成してから、パイプライン コンポーネントが管理するキューに追加する必要があります。このキューへのアクセスは、パイプライン コンポーネントによって実装された IDisassemblyrComponent インターフェイスの "GetNext" メソッドを通じて提供されます。zip ファイルのコンテンツを処理するためにこのようなことを行う例は、http://www.codeproject.com/KB/biztalk/btsunzipdisassemblyr/UnzipDisassemblyr_src.zipの CodeProject にあります。そのコードが zip ファイルを処理している場所をコードに置き換えて、メッセージを処理するだけです

メッセージを「DOM」と比較して処理する場合は、ストリーミングを使用することをお勧めします。ストリーミング パイプライン コンポーネントの開発例は、http://www.microsoft.com/en-us/download/details.aspx?id=20375にあります。

于 2012-05-04T18:24:08.073 に答える
0

あなたはメッセージのデバッチを見るかもしれません。そのリンクのオーケストレーションの提案はあなたが探しているものかもしれません。

于 2012-05-07T16:18:25.163 に答える
0

カスタム XSLT と [Muenchian Method] を使用したマップで、これと同様のことを行いました: http://www.jenitennison.com/xslt/grouping/muenchian.html

それ自体はデバッチしませんが、それを envlope スキーマと一緒に使用して、ループバック ポート経由でメッセージを再送信するか、オーケストレーションから受信パイプラインを実行して実際のデバッチを実行できます。

于 2012-05-09T20:34:44.807 に答える