0

完全に動作する BizTalk 2006 R2 アプリケーションがあります。メッセージを受信して​​処理し、正しい応答を送信します。

しかし、すべてが正しい (メッセージがオーケストレーションによって正常に取得され、応答がエラーなしで送信される) にもかかわらず、BizTalk は応答メッセージに関連する「メッセージが消費されていません」というエラーを生成します...

私はアプリケーションのすべての部分をデバッグしましたが、エラーはなく、メッセージの重複もメッセージの残りも何もありません...エラーをグーグルで検索したところ、件名で見つけたいくつかのリンクの大部分はゾンビに関連していますスクリプトをクリーンアップします。これは、BizTalk では一般的な問題ではないのではないかと思います...

このエラーの原因について何か考えがある人はいますか?

4

6 に答える 6

5

ええ...これは一般的な問題であり、ほとんどの場合、ソリューションを組み立てる方法を少し変更することで解決できます。

ゾンビは通常、相関とタイムアウトを使用しているときに発生しますが、唯一の場合ではありません。オーケストレーションは、相関セットへの応答またはタイムアウトのいずれかを待機して脱水状態になります。タイムアウトが発生した場合、オーケストレーションは、相関応答を待機している受信場所を過ぎて通常の処理に進みます。これでメッセージ ボックスは応答を受け取りますが、その応答を待っているものはもうありません。したがって、あなたのエラー。

Web サービスを呼び出して応答を待っているときにも、この動作を見てきました。しかし、これは私がエラーを処理する方法に関係していました。私のプロセスを少し変更することで、その問題は解決しました。

この問題の発生を最小限に抑える方法は、タイムアウト後にオーケストレーションが行う作業の量を短縮することです。ゾンビが発生するウィンドウをできるだけ小さくします。

この非決定論的な終了の問題を回避できない場合があるため、これらのメッセージを受信して​​クリーンアップする「ZombieHandler」プロセスを構築していることに気付きました。

プロセスに関する詳細情報を投稿していただければ、さらに支援を試みることができます。

于 2009-07-19T22:08:23.940 に答える
2

これはゾンビのように聞こえます。オーケストレーションで相関と待機時間を使用していますか? もしそうなら、あなたはゾンビランドにいます。問題は、どのトリガーが最初にトリガーされるかを確認するために、待機と二次読み取りがあることです。待機が最初にトリガーされ、相関に関する新しいメッセージが入ってくる場合... ゾンビ。

オーケストレーションについて詳しくお知らせいただければ、解決策についてさらに話し合うことができます。

于 2009-07-18T20:09:48.817 に答える
0

元のメッセージが複数のオーケストレーションによって処理されている可能性はありますか?この場合、話し合っているオーケストレーションへの応答のために、メッセージボックスに2つのメッセージが戻される可能性があります。この場合、最初のメッセージは相関セットによって取得されます。次の受信にはループ構造がないため、2番目のメッセージにはどこに行くべきかがありません-ゾンビ。

于 2009-07-24T13:06:20.040 に答える
0

@ChrisLoris:

オーケストレーションのスクリーンショット:http://img139.imageshack.us/img139/2307/orchestration.jpg

上のスクリーンショットでは、送信/受信ポートにリンクされたオーケストレーションがあることがわかります。基本的に、処理するメッセージを取得し、そのいくつかの属性を更新して、特定のプロパティに基づいて相関を初期化しながらメッセージボックスに送信します(MsgIdentifierと呼びます)。他のオーケストレーションはこのメッセージをピックアップし、実際の処理を行います。同じMsgIdentifier(カスタムプロパティ)を使用して応答がメッセージボックスにドロップされると、このオーケストレーションはそれを取得し、元のリクエスターに送り返します。

相関は、要求をメッセージボックスに送信する送信シェイプで初期化され、次の受信シェイプは、同じ相関に従う応答、つまりMsgIdentifierプロパティに同じ値を持つ応答を待機します。

このオーケストレーションは、外部システムとBizTalkアプリケーションの内部動作の間の仲介者であるブローカーと考えてください。

繰り返しになりますが、すべてが正常に機能しており、問題なく正しいメッセージが取得されています。これは、私が分析しようとしているまったく奇妙な動作です。応答が検出され、消費されて返されるため、応答を消費されていないメッセージとしてマークするべきではありません。

于 2009-07-23T10:56:14.210 に答える
0

エラーはイベント ログではなく BizTalk グループ パネルにあり、「インスタンスはすべてのメッセージを消費せずに完了しました。インスタンスとその未消費のメッセージは中断されました。」です。基本的に、双方向ポートを介してメッセージを受信し、相関を初期化しながらメッセージ ボックスに送信するメイン オーケストレーションがあります。このオーケストレーションの次のシェイプは、(タイムアウト ロジックなしで) メッセージを待機し、前の送信シェイプで作成された関連付けに従います。応答が受信されると、元のリクエスタに転送されます。

これは非常に単純なオーケストレーション (スクリーンショット: http://img139.imageshack.us/img139/2307/orchestration.jpg ) で、ロジックはほとんどありません。ポイントは、私は常に正しい応答を得ているということです。そのため、「メッセージが消費されていません」というエラーを引き起こしている原因を特定できません。ちなみに、消費されていないとフラグが立てられたメッセージは、応答メッセージです。

さらにアイデアはありますか?

Ps。ryancrawcour さん、ZombieHandler について詳しく説明していただけますか? そのようなオーケストレーションをどのプロパティにバインドしますか?

于 2009-07-20T10:40:12.827 に答える
0

なぜ相関セットを使用しているのですか? 相関セットの初期化受信があります。次の受信はどこですか?

一歩下がって、相関の要件について説明していただけますか? ここで結び付けようとしているメッセージは何ですか? このオーケストレーションから相関関係を取り除けば、完全に機能すると思います。

見たい場合は、相関チュートリアルへのリンクを次に示します。

于 2009-07-23T02:21:55.040 に答える