0

私のオーケストレーションには送受信ポートがあり、送信シェイプが見つかるまで、操作されるすべてのメッセージはまったく同じです。つまり、送受信ポートを介してOracleデータベースに送信するメッセージは同じです。

基本的に、最新の変更を希望するテーブルとテーブルの所有者を示すリクエストをデータベースに送信しています。前述したように、機能した更新と機能しなかった更新を比較すると、この時点まで、両方の要求メッセージは同じです。

問題: データベースからの応答は空である可能性があり、空であってはなりません。変更されたテーブルからの完全な行を期待していますが、何も受信しない場合があります。

詳細: これらのテストをトリガーする最も単純なフィールドのみを変更し、常に同じフィールドを変更しています。つまり、99 から 98 から 97 から 98 にデクリメントまたはインクリメントする整数フィールドなどです。最初は 1 つの数値が機能する可能性がありますが、 2番目ではないか、時にはその逆です。

他のフィールドでは、このエラーが発生する可能性があります。

詳細... : Oracle の機能に問題があるようです。つまり、タイムスタンプを処理する方法により、Oracle が空のレコードを返す可能性があります。これは、Biztalk が既に変更を通知されていると想定しているためです。データベースの内部を調べていると、最後の変更の試行がすべて正確に同じ秒にタイムスタンプされていることがわかりました (物理的に不可能です)。

また、Oracleにメッセージを送信しているときに、エラーを引き起こしているように見えることを2回行うようです(ちなみに、問題のテーブルにはトリガーがありません)。私のオーケストレーションでは、メッセージを送信する直前にイベントログに書き込みますが、そのメッセージは一度だけ書き込まれます...

Oracleの問題のようです。現在、一貫して機能するフィールドが機能せず、他のフィールドが機能する場合があります-以前は抽選の運が良かったと思います.

なぜ私はこれが起こっていると思うのですか: 私は、(データベースが私に言った) 変更されたクライアントを私に与えるように頼みます. それが機能するとき、Biztalk にメッセージを返すのは最初の取得であり、したがって、実際の情報を持っています。そうでない場合は、2 番目の検索で最新の変更が要求され、最初の検索で既に変更が取得されているため、空のレコードが返されるためです。

4

2 に答える 2

0

あなたの問題に対する特定の解決策はありませんが、おそらく解決策は、null 応答を受け取るインスタンスを処理する方法を考えることにあります。これが発生すると、ダウンストリームの問題が発生するため、解決できない場合は、null 応答を有効な応答として受け入れるようにコーディングする必要があります。

その場合、応答で期待していた実際のデータを取得するために別のダウンストリーム プロセスに委任する必要がある場合があります。

ただし、状況によっては、複数の個別の呼び出しを行う必要がある場合でも、これは単一の論理インターフェイスと見なすことができます。

null 応答を処理するには、受信ポートを変更して、受信応答を XmlDocument にキャストすることにより、型指定されていないメッセージを予期するようにします。

お役に立てれば。

于 2011-09-17T18:25:46.873 に答える
0

問題は次のとおりでした。

  • 別の開発者は、別のサーバーに同様のオーケストレーションをセットアップしました。これにより、開発中のオーケストレーションと並行して、同様のメッセージが Oracle に送信されます。

これが、私が知っているオーケストレーションだけがそれを実装していたため、ログ メッセージが 1 つしか得られない理由です。

于 2011-09-19T15:42:04.577 に答える