2

そのため、MVC4 でプロセスをデバッグしようとしています。POST リクエストを送信し、それがデータベースを操作するのを監視します。しかし、見たい情報が表示されたら、[デバッグを停止] をクリックします。典型的な GUI .NET アプリケーションでは、プロセスは終了すると思いますが、代わりに実行を続けます。ファイルに変更を加えて再度デバッグしようとすると、ファイルが以前に実行されたまだ実行中のプロセスから古くないため、ブレークポイントはヒットしません。この時点で 2 つの選択肢があります。デバッグを続行するには、タスク マネージャーで w3wp.exe タスクを実行するか強制終了します。

[Debug] -> [Terminate All] をクリックしようとしましたが、プロセスは引き続き実行されます。これは、プロセスにアタッチし ([デバッグ] -> [プロセスにアタッチ])、実行中に多くのブレークポイントの 1 つで一時停止するためです。

Google Chrome を使用して POST リクエストをコントローラーに送信しているため、IE を使用していないため終了しない可能性がありますが、IE ブラウザーを使用するよりも優れた解決策があると思います。

これを回避するには、Windows タスク マネージャーに移動して、IIS プロセス (w3wp.exe) を強制終了する必要があります。何か案は?

4

2 に答える 2

0

w3wp ワーカー プロセスを再起動するためのより適切な方法をいくつか示します。

  • コマンド ラインで「iisreset」を実行します。
  • IIS マネージャー コンソールで、対応するアプリケーション プールを選択し、[リサイクル] をクリックします。

実行時間の長いビジネス ロジックを正常にシャットダウンするには、global.asax で Application_Shutdown イベントを試してください。

あまり優雅ではないアプローチでは、ThreadPool が役立つ場合があります。そのスレッドはバックグラウンドとしてマークされているため、w3wp のメイン スレッドが終了したときに、Windows はスレッドが完了するのを待ちません。ただし、サード パーティのライブラリ (特にネットワーク) が非バックグラウンド スレッドを作成し、シャットダウンが遅延する可能性があるため、このアプローチが常に機能するとは限りません。

さらに高速でダーティな場合は、何らかのデバッグのみのイベントによってトリガーされる Environment.Exit を使用します。http://msdn.microsoft.com/en-us/library/system.environment.exit(v=vs.110).aspx

于 2013-11-09T06:29:31.917 に答える