0

TransactionScopeインスタンスを作成するVB.NETコードがいくつかあります。

LoggingUtility.LogDebug("UpdateCallTable", "SatComCallDataImporter", "About to associate call data with contracts")
Using ts = New TransactionScope()
    LoggingUtility.LogDebug("UpdateCallTable", "SatComCallDataImporter", "Getting all unimported SatCom calls")

私のアプリケーションは、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」という新しいTransactionScopeの作成の呼び出しで例外をスローしています。例外は、開発マシンまたはテストマシンではスローされません。顧客の生産機械だけで、理由はわかりません。この行の直前と直後にデバッグ行を配置したので、この行が問題の原因であると確信しています。

アプリケーション全体でTransactionScopesを使用しており、これがクライアントマシンで例外をスローする唯一の場所です。

「コールデータをコントラクトに関連付けようとしています」がログに書き込まれ、次のログエントリは「オブジェクトのインスタンスに設定されていないオブジェクト参照」です。

コードをトランザクションから移動すると、コードは正常に機能します。

私はこれに4日間苦労していて、近づいていません。

4

1 に答える 1

1

おそらく、MSDTC に問題がありますか?

ただし、TransactionScopeオブジェクトは初期化され、nullではないはずですが、エラーを示しているため、コーディングエラーにもっと傾いています。

おそらく、コードを表示すると、さらに役立つのではないでしょうか?

更新:ログ エンジンが例外の前に行をログに記録できなかった経験があります。これは、リリース モードの並べ替えが原因である場合や、ルーチンがアクティブにフラッシュされず、完了する前にアプリがひどくクラッシュする場合があります。

using() ステートメントの直後にロギング行を配置して、TransactionScope が null ではないことをアサートすることをお勧めします。コードの使用方法を考えると、そのコードの結果がnullを返すことは不可能です。コンストラクターが失敗した場合、コンストラクターは例外をスローする必要があります。そうでない場合、null以外のトランザクションスコープがあります。

おそらく、もう少しコードとこのテストがもう少し役立つでしょうか?

于 2009-11-21T23:53:25.047 に答える