0

Supopse未処理の例外(または既知の重大で回復不能なエラー)があります。最も恐ろしい状況はセキュリティ違反ですが、それは私の状態がひどく馬鹿にされていることを意味するものすべてに当てはまる可能性があり、安全に続行することは期待できません。

私は何をしますか?

従来のアプリケーションでは、通常の手法はプロセスをすばやく終了することです。できるだけ早く。私はProcess.Exit、TerminateProcess、die、または環境にあるその他のツールを「END.NOW」と呼んでいます。Eric Lippertの投稿は、この態度の理由をよく表しています。

IISで実行されている実稼働ASP.NETアプリケーションでは、それほど単純ではありません。私は確かに現在のプロセスを終了し、イベントログまたはどこにでもエラーを咳をすることができます。これは基本的に、未処理の例外で発生することです。ただし、次にリクエストが届いたとき、IISは新しいワーカープロセスを起動するだけです。私の致命的なエラーが一時的な問題だったとしたら、それは素晴らしいことです。

しかし、私の問題が私のプロセスの存続期間を超えて続く場合、新しい問題はこれ以上良くなることはありません。初期化コードや再試行によってさらに複雑になる可能性があります。さらに、IISが同じアプリケーションプール内で複数のワーカープロセスを実行している場合、プロセスを強制終了してもアプリケーションは強制終了されません。論理的に言えば、他のすべての労働者も馬鹿にされて、まだそれを知らないかもしれません。

これまでのところ、私は2つのオプションしか考えていません。

  • プロセスを終了し、最高のものを期待してください。アプリが再起動されることを知っているので、これは「catch(Exception){}」とほとんど同じです。ほとんど満足できません。
  • 「手を差し伸べる」ことで、IISにアプリを無効にしたり、IISやマシンを停止したりするように指示します。これは、残忍なハッキングのようです。さらに、セキュリティの高い資格情報が必要になる可能性が高いと思います。侵害された可能性のあるプロセスの終了時に、それらを取得するのは適切な時期ではないようです。
4

1 に答える 1

1

私が考えることができるのは次のようなものです:

  1. 「Rapid-Failprotection」という名前のIISのアプリケーションプールの詳細設定を使用して、障害間隔を必要な長さに設定し、最大障害を1に設定してから、例外をスローしてIISを作成できます。このアプリケーションプールは正しく機能しないため、 Service Unavailableがクライアント側に返送されたり、接続がリセットされたりする可能性があります(設定によって異なります)。詳細については、こちらを確認してください:アプリケーションプールの障害設定。ただし、やりすぎないように十分に注意する必要があります。つまり、すべての例外が適切に処理され、アプリケーションを終了したいものだけがIISによって実際に検出される、非常に優れたアプリケーションを作成する必要があります。あなたのサイトをダウンさせました。

  2. 別の解決策は、それを独自のコードにすることです。つまり、 SystemCrashedという名前のファイルを作成し、アプリケーションを終了し、ファイルがApplication_Startupに存在するかどうかを確認して、終了する以外に何もしないなど、特定の方法でこのようなエラーを記録できます。ファイルが見つかった場合のアプリケーション。ロックのようなもの。これにはより多くのコードが必要ですが、IIS設定よりも安全かもしれません。つまり、ロックを解除する権利を取得している限り、やり過ぎはあり得ないということです。

于 2013-01-25T09:02:45.783 に答える