1. ホーム
  2. c#

[解決済み】ハンドラ「ExtensionlessUrlHandler-Integrated-4.0」のモジュールリストに「ManagedPipelineHandler」という不正なモジュールが存在する。

2022-04-02 04:28:01

質問内容

正直なところ、IISで汚い手を使おうとして、これで逃げ切れると思った矢先に、自分の回避策が通用しないことに気づきました。以下は、私が試したことです。

1) ASP.NETアプリケーションに プリローダー を継承したクラスです。 IProcessHostPreloadClient で重い初期化をすべて行い プリロード メソッドを実装しています(アプリケーションは複雑で、巨大なシステムの一部であるため、必要なすべてのサービスへの接続を確立し、いくつかのUnity登録を事前に行うのに約2分必要です)。

2) アプリケーションのシャットダウン(登録解除、接続解除、廃棄など)に関してやらなければならないことがたくさんあります。 グローバル.asax .

3) ユーザーの活動があるときはすべてうまくいきますが(前述のウェブアプリケーションを含むアプリケーションプールが開始された後の最初のリクエストで *Application_Start* が呼ばれ、その後アプリケーションプールの停止またはリサイクルで *Application_End* が呼ばれます)、ユーザーの活動がないときに問題が生じ、48時間(設定された要件)活動した後にアプリケーションが自身を再起動しようとしました。要求がないため、アプリケーションは正式に開始されませんでした。つまり、*Application_End*が呼び出されないため、優雅に停止することができません。

4) さて、ここからが厄介なところです。の末尾にあるコードから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" has a bad module "ManagedPipelineHandler" in its module list

これを解明することができません。なぜこのようなことが起こるのか、どのように修正すればよいのか、どなたか教えていただけませんか?

もし、これがわからなければ、最初の解決策(コードからGETリクエストを送る)に戻るつもりですが、何が問題なのか見当もつかないので、この問題は私を悩ませることになるでしょう。

解決方法は?

問題点

を使用しています。 SimpleWorkerRequest を、そのために設計されていないシナリオで使用しています。あなたはそれを使っています IIS内部 . 先のMSDNのリンクを見てみると(強調は私です)。

HttpWorkerRequest 抽象クラスの簡単な実装を提供します。 インターネットインフォメーションサービス(IIS)アプリケーションの外部で ASP.NET アプリケーションをホストするために使用されます。 . SimpleWorkerRequestを直接採用することも、それを拡張することもできます。

また、MSDN のドキュメントで System.Web.Hosting 名前空間 ( SimpleWorkerRequest はこの名前空間にあります)、また、上記のようなものが表示されます(再度、強調は私です)。

System.Web.Hosting 名前空間は、マネージド・アプリケーションから ASP.NET アプリケーションをホストするための機能を提供します。 マイクロソフトインターネットインフォメーションサービス (IIS) の外側 .

解決方法

への呼び出しを削除することをお勧めします。 SimpleWorkerRequest . その代わりに、マイクロソフトのソリューションを使って、ウェブサイトがリサイクルされた後に自動的に起動するようにすることができます。必要なのは、マイクロソフトの IIS 7.5用アプリケーション初期化モジュール . 設定方法は複雑ではありませんが、正確なオプションを理解する必要があります。このような理由から、私は アプリケーション初期化UI(IIS 7.5用 . このUIは、MSDNブロガーによって書かれたものです。

では、マイクロソフトのソリューションは具体的に何をするのでしょうか?IISは、アプリケーションプールが開始された後、あなたのウェブサイトに"get"リクエストを送信します。