2

架空の状況:ASP.Net Webシステムでサードパーティの.netアセンブリが使用されていて、時々クラッシュすることがあるとしましょう。その場合、システムが再起動されるまで、それに対するすべての呼び出しは例外をスローします。これは明らかに、少し最適ではありません。

例外ハンドラからそのアセンブリだけを再起動する方法はありますか?

(補遺:もちろん、ここでの正解は、ベンダーにバグを修正してもらうことです。ただし、問題のベンダーは、メールへの回答に「消極的」です。したがって、この再起動により、アセンブリのアイデアが今朝生まれました。 MacGyver-eqsueのダクトテープとして。そして、私たちは誰もそれを行う方法を知らないことに気づきました。)

4

6 に答える 6

7

HttpRuntime.UnloadAppDomain() を呼び出すと、アプリケーションは強制的に終了し、次の Web リクエストが到着したときに再起動します。これにより、すべてが最初から再ロードされ、破損したアセンブリ データが削除されます。

確かに、これによりアクティブなセッションがすべて強制終了されますが、アプリケーションが本質的にクラッシュする場合は、おそらくこれで問題ありません。

于 2008-11-13T21:48:54.830 に答える
4

アプリ プールをリサイクルすることはできますが、これにより、現在のすべてのユーザーがオフになり、セッション情報が失われます。これは、サイトが既に悪い dll によってホースされているかどうかは問題ではない可能性があります。

于 2008-11-13T19:06:52.800 に答える
4

OK、本当の答えです... Web.Config ファイルが変更されると、アプリが再コンパイルされ、アプリ プールがリセットされます。

したがって、(これは言いたくありません) プログラムで web.config ファイルを変更します。

ところで、これを行うことはお勧めしません。そのため、他の人のために反対票を保存できます。

于 2008-11-13T19:09:10.097 に答える
2

仮説として...サードパーティのベンダーに戻って、バグを修正してもらいます。

于 2008-11-13T19:00:28.650 に答える
0

web.config を変更する以外に、bin フォルダーに任意のファイルを作成できます。これにより、アプリケーションが再起動します。

于 2008-11-13T23:17:31.733 に答える
0

奇妙にクラッシュした場合でも、その後の DLL の呼び出しを阻止するアクティブなプロセスが残っている可能性があります。その場合、プログラムで見つけて強制終了できる可能性があります。これにより、再起動が必要だった問題が解決する可能性があります。

于 2008-11-13T19:09:21.173 に答える