正直なところ、私はIISで汚いトリックを試してみましたが、それを回避しようと思ったとき、回避策が機能しないことに気付きました。これが私がやろうとしたことです:
1)私が持っているASP.NETアプリケーション持つプリローダーを継承するクラスIProcessHostPreloadClientとのすべての重い初期化を行いプリロードメソッドの実装は、(アプリケーションが複雑であり、それはすべての必要なへの接続を確立するために約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要求を送信する)に戻りますが、何が問題なのかわからないので、この問題は私を悩ませます。