0

AccessViolationException が発生した場合、それに関連する障害のあるモジュールは、それがそのモジュールのバグであることを意味しますか? この場合、たまたまサードパーティの DLL の 1 つですか? それとも、これはもっと複雑な問題ですか?このモジュールのメーカーに連絡しましたが、バグは見つかっておらず、スタックの破損の可能性を示唆しているだけです。ただし、イベント ログによると、特定のエラー モジュールは常に AccessViolationException に関連付けられています。では、これについての真実は何ですか?バグのあるサードパーティの DLL モジュールですか、それとも何か他のものですか?

バックグラウンド

IIS 7 で実行されている .NET WCF Web サービスでミューテックスで保護された VB6 STA COM オブジェクトを使用しています。最近、Web サービスを完全にクラッシュさせるランダムな System.AccessViolationException エラー (このオブジェクトが原因) を検出しました。現時点では、この COM オブジェクトを Web サービスで動作させるためにあらゆることを行っています。サービス自体は、次のガイドを使用して STA モードで実行するように設定されています。

ありがとう

4

1 に答える 1

0

これは、スレッド終了時のVB6ランタイムリークに関連している可能性があります。VB6 ActiveX DLLプロジェクトには、「無人実行」および「メモリ内に保持」のオプションがあり、STAスレッドでの実行時間を可能な限り長く保つことでこれらの問題を軽減しようとします。これらのオプションがコンポーネントに適用できるかどうかをベンダーに問い合わせてください。

いずれの場合も、VB6ランタイムがいつでも内部構造を破棄しようとしないように、それらのSTAスレッドが終了しないようにし、それらのプールを実装する(または単一のSTAスレッドでシリアル化する)ことをお勧めします(およびリークハンドル/メモリ/TLSがそれを実行します)。

COM + / MTSでVB6コンポーネントの使用を検索すると、貴重なアドバイスが見つかる場合があります。そして幸運を祈ります!

于 2012-09-13T08:49:57.277 に答える