正直なところ、私はIISで汚いトリックを回そうとしましたが、それを回避しようと思ったとき、回避策が機能しないことに気付きました。これが私がやろうとしたことです:
1) IProcessHostPreloadClientを継承し、 Preloadメソッドの実装ですべての重い初期化を行うPreloaderクラスを持つASP.NETアプリケーションがあります(アプリケーションは複雑で、巨大なシステムの一部であるため、必要なすべての接続を確立するのに約2分かかりますサービスを提供し、一部のUnity登録を事前にインスタンス化します)。
2)アプリケーションのシャットダウン(サブスクライブ解除、切断、破棄など)で実行する必要のある作業がたくさんあります。これを実行するのに最適な場所は、Global.asaxにある*Application_End*メソッドです。
3)ユーザーアクティビティがある場合はすべて正常に機能します(前述のWebアプリケーションを含むアプリケーションプールが開始された後の最初のリクエストにより、* Application_Start *が呼び出され、その後、アプリケーションプールの停止またはリサイクルで* Application_End *が呼び出されます)が、問題が発生しますユーザーアクティビティがなく、アプリケーションが48時間アクティブになった後、アプリケーションが自動的に再起動しようとした場合に発生します(構成された要件)。リクエストがなかったため、正式に申し込みは開始されませんでした。エルゴ、* Application_End *が呼び出されないため、正常に停止することはできません。
4)厄介な部分があります... Preloadメソッドの最後にあるコードからGETリクエストを作成しようとしましたが、機能しました。しかし、この解決策はうまくいったとしても、私には悪いように思えました。だから、私はたくさんのことを試しました、そして私が最後に試したのはこれでした:
SimpleWorkerRequest swr = new SimpleWorkerRequest(string.Empty, string.Empty, tw);
HttpRuntime.ProcessRequest(swr);
...そしてそれはその目的を果たしました。* Application_Start *が呼び出され(応答を確認しました。最初のリクエストで表示されるはずのログインページが含まれていました)、アプリケーションプールのシャットダウン時に*Application_End*で必要な作業を行うことでアプリケーションが正常に終了しました。
しかし
この方法でアプリケーションが開始(プリロードおよび開始)された後、Webブラウザーを介してアプリケーションにアクセスしたいときに次のようになりました。
HTTPエラー500.21-内部サーバーエラーハンドラー「ExtensionlessUrlHandler-Integrated-4.0」のモジュールリストに不正なモジュール「ManagedPipelineHandler」があります
私はこれを理解することができません。なぜこれが起こるのか、そしてそれを修正する方法を誰かに教えてもらえますか?
これがわからない場合は、最初の解決策(コードからGETリクエストを送信する)に戻りますが、何が問題なのかさえわからないため、この問題は私を悩ませます。