web-dev-qa-db-ja.com

ハンドラー "ExtensionlessUrlHandler-Integrated-4.0"のモジュールリストに "ManagedPipelineHandler"モジュールが正しくありません

率直に言って、私はIISに汚いトリックをオンにしようとしましたが、それを回避しようとしていたと思ったときに、私の回避策は機能しないことに気付きました。これが私がやろうとしたことです:

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

2)アプリケーションのシャットダウン(購読解除、切断、破棄など)を行うために必要な作業がたくさんあります。そのためにはにある* Application_End *メソッドを使用することをお勧めします。 Global.asax

3)ユーザーアクティビティがある場合はすべてうまくいきます(前述のWebアプリケーションを含むアプリケーションプールが開始された後の最初の要求で* Application_Start *が呼び出され、その後Application Poolの停止またはリサイクル時に* Application_End *が呼び出されます)。ユーザーアクティビティがなく、アプリケーションが48時間アクティブになった後に自動的に再起動しようとした場合に発生します(構成要件)。要求がなかったので、アプリケーションは正式に開始されませんでした。 Ergo、* Application_End *が呼び出されることはないので、正常に停止することはできません。

4)厄介な部分がやってきます...Preloadメソッドの最後にコードからGETリクエストを行おうとしましたが、うまくいきました。しかし、この解決策はうまくいったとしても、私には悪いようでした。それで、私はたくさんのことを試しました、そして私が試した最後のことはこれでした:

SimpleWorkerRequest swr = new SimpleWorkerRequest(string.Empty, string.Empty, tw);
HttpRuntime.ProcessRequest(swr);

それが目的です。 * Application_Start *が呼び出され(応答を確認しました。最初のリクエストで表示されるはずだったログインページが含まれていました)、Application Poolシャットダウンアプリケーションで* Application_End *で必要な作業を行うことで正常に終了しました。

BUT

このようにしてアプリケーションが起動(プリロードおよび起動)された後、Webブラウザを介してアプリケーションにアクセスしようとしたときにこれが起こりました。

HTTPエラー500.21 - 内部サーバーエラーハンドラ "ExtensionlessUrlHandler-Integrated-4.0"のモジュールリストに不良モジュール "ManagedPipelineHandler"があります

私はこれを理解することができません。なぜこれが起こるのか、そしてどのようにそれを修正するのか誰かが私に言うことができる?

これを理解していない場合は、最初の解決策(コードからGETリクエストを送信する)に戻りますが、何が問題なのかさえわからないので、この問題で問題が発生します。

236
Ivan Peric

問題

設計されていないシナリオで SimpleWorkerRequest を使用しています。 IISの内部で使用しています。以前のMSDNリンクを見ると(強調は私のものです):

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

また、MSDNのドキュメントで System.Web.Hosting名前空間SimpleWorkerRequestはこの名前空間にあります)を見ると、上記に似たものも表示されます(繰り返しますが、鉱山):

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

解決策

SimpleWorkerRequestへの呼び出しを削除することをお勧めします。代わりに、Microsoftソリューションを使用して、Webサイトがリサイクルされた後に自動的に起動することを確認できます。必要なのは、Microsoft IIS 7.5のアプリケーション初期化モジュール です。構成は複雑ではありませんが、正確なオプションを理解する必要があります。これが IIS 7.5のアプリケーション初期化UI も推奨する理由です。 UIは、MSDNブロガーによって作成されています。

それでは、Microsoftソリューションは正確に何をするのでしょうか?しようとしていることを実行します-アプリケーションプールが開始された後、IISは "get"リクエストをWebサイトに送信します。

23
chue x

ASP.NETをaspnet_regiis -iで再登録してください。それは私のために働きました。

.NET 4の可能性の高いパス(昇格されたコマンドプロンプトから):

c:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i

http://forums.iis.net/p/1190643/2026401.aspx

641
danijelk

Windows 8/Windows Server 2012および.NET 4.5でこのエラーが発生した場合は、以下の手順に従ってください。 http://www.britishdeveloper.co.uk/2013/01/handler -extensionlessurlhandler.html

「Windowsの機能の有効化または無効化」に進み、次にインターネットインフォメーションサービス、ワールドワイドウェブサービス、そしてアプリケーション開発機能の順に選択して、ASP.NET 4.5を有効にします。

これは私にとってはうまくいきました(ただし、Windows Server 2012ではウィザードと表現は少し異なりますが、わかります)。とは言っても、依存関係のすべてを含むWeb Platform Installerを通してすべてをインストールした後にこれが必要になるのは、私をはるかに超えています...

158
Zach

このページの多くのアドバイスに従ったにもかかわらず、私はまだWindows Server 2012で問題を抱えていました。NETExtensibility 4.5をインストールすることは私のためにそれを解決しました:

Add Roles and Features > Server Roles > Web Server (IIS) > Web Server > Application Development > .NET Extensibility 4.5

51
Jonathan

次のいずれかのコマンドを実行してください。

32ビットWindows OSの場合

c:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i

64ビットWindows OSの場合

c:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -I
39
user3896335

Windows 10/Windows Server 2016の場合は、次のコマンドを使用します。

dism /online /enable-feature /featurename:IIS-ASPNET45 /all

aspnet_regiisに関する推奨回答は、Windows 10(Creators Update以降)またはWindows Server 2016では機能しません。

C:\ Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i
Microsoft(R)ASP.NET RegIISバージョン4.0.30319.0
ローカルマシンにASP.NETをインストールおよびアンインストールするための管理ユーティリティ。
Copyright(C)マイクロソフトコーポレーション。全著作権所有。
ASP.NET(4.0.30319.0)のインストールを開始してください。
このオプションは、このバージョンのオペレーティングシステムではサポートされていません。代わりに、管理者は[Windowsの機能の有効化/無効化]ダイアログを使用してIIS 8でASP.NET 4.5をインストール/アンインストールしてください。またはdism.exeコマンドラインツール詳細については、 http://go.Microsoft.com/fwlink/?LinkID=216771 を参照してください。
ASP.NETのインストールが完了しました(4.0.30319.0)。

興味深いことに、[Windowsの機能の有効化/無効化]ダイアログで、.NETまたはASP.NET 4.6のチェックを外すことはできず、上記のDISMコマンドのみが機能しました。 featurenameが正しいかどうかわからないが、それは私のために働いた。

36
Bart Verkoeijen

これ https://stackoverflow.com/a/13266763/1277458 は完全に機能します。しかし、64ビットオペレーティングシステムを使用している場合は、パスにFrameworkではなくFramework64を使用します。

c:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i
24
Neshta

私の場合(Windows 10 + IIS 10)私は「Windowsの機能の有効化または無効化」を開いてから次に進みます。インターネットインフォメーションサービス>ワールドワイドウェブサービス>アプリケーション開発機能>とASP.NET 4.6をチェックする

13
Xaris Fytrakis

これは私自身のポストを作るのでこれは私が何時間も行っていたので。

私はこの問題とaspnet_regiisの修正について、ここや他の場所に同様の投稿を何十も見たことがあります。彼らは私のために働いていませんでした、そしてaspnet_regiisは奇妙な行動をしていました、選択肢をリストするだけなど。

上記のユーザーryan-andersonが示したように、.exeを入力することはできません。

サーバー上のIIS以外のものにあまり満足していない人のために、簡単な手順でこれを行います。

  1. このパスに似たフォルダーでaspnet_regiisを見つけます。 c:\ Windows\Microsoft.NET\Framework\v4.0.30319 \

  2. スタートメニューまたはどこででもプロンプトを右クリックして、管理者として実行するように指示します。 Windowsの「実行」機能を使用しても、うまくいかない、または私にはうまくいきませんでした。

  3. Aspnet_regiis実行可能ファイルに戻ります。それを右クリックしてコマンドプロンプトにドラッグするか、アドレスをコマンドプロンプトにコピーアンドペーストします。

  4. ある場合は、最後に.exeを削除します。これが鍵です。末尾に-i(スペースマイナスアイ)を追加します。入る。

あなたがこれを正しくしたならば、あなたはそれがasp.netをインストールし始めて、そしてあなたにそれが成功したことを告げるのを見るでしょう。

6
shubniggurath

私はこれがオールディーズだと知っていますが、私は何らかの価値を加えることができると考えました。ドメインの外でServer Coreを実行しているユーザー(ドメインメンバーは、機能や役割を追加/削除するためにサーバーマネージャーをリモートで実行することができます)では、コマンドラインを使用する必要があります。

Powershellユーザーは「Install-WindowsFeature Web-Asp-Net45」と入力できます

それはサーバマネージャを使用することと同等であるはずです。

4
jwdaigle

.net 4.7がインストールされた状態で、同じエラーメッセージが表示されました。

解決策は、「.NET Framework 4.7 Advanced Services」 - >「ASP.NET 4.7」がすでにチェックされている「Windowsの機能の有効化または無効化」を実行するための前述の投稿に従うことでした。

リストのさらに下には、「インターネットインフォメーションサービス」とサブアプリケーション「アプリケーション開発機能」 - >「ASP.NET 4.7」があります。これらもチェックする必要があります。

これを有効にすると、他の多くの機能が有効になります。私はOkボタンを押すだけで問題は解決しました。 Windows機能ダイアログのスクリーンダンプ

4

IISマネージャで、application-siteのバージョンをv2.0からv4.0に設定していることを確認します

アプリケーションプール>アプリケーション>詳細設定> .NET Frameworkのバージョン

その後、ASP.NETをインストールしてください。

32ビットOS(Windows)の場合

C:\ Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i

64ビットOS(Windows)の場合

C:\ Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i

IIS Managerでapplication-siteを再起動して楽しんでください

3
Arsman Ahmad

私はこの問題を抱えていて、Express版以外でも次のフォルダを削除することが助けになることを発見しました。

C:\Users\<user>\Documents\IISExpress

1
Thomas Bratt

私はWindows Server 2012に取り組んでいます。NETExtensibility 4.5機能がオンになっています。 WebDAVModuleが削除されました。私はまだASP.NETルート「/ docs」で500.21エラーを受けていました。

'skipManagedModules'をfalseに変更して問題を解決しました。

<applicationInitialization doAppInitAfterRestart="true" skipManagedModules="false">
        <add initializationPage="/docs" />    
</applicationInitialization>

ありがとう https://groups.google.com/forum/#!topic/bonobo-git-server/GbdMXdDO4tI

1
shemanov

先週、このエラーが私のところで起こり始め、私のマシン上の既存のWebサイトに影響を及ぼしました。私はそれがここの提案のどれかを試みることにそれで運がなかった。結局、私はIISからWebDAVを完全に削除しました(Windowsの機能 - >インターネットインフォメーションサービス - >ワールドワイドウェブサービス - >共通HTTP機能 - > WebDAVパブリッシング)。この後、IISリセットを実行して対処しましたが、やっとエラーが解決しました。

私はWindowsのアップデートが問題を始めたとしか推測できないが、私は確信が持てない。

1
pirsqua

私はこの問題を解決し、「Windowsの機能の有効化または無効化」を追加しました オプションASP.NET 4.7

0
Edgar Chivichon

共有ホスティングサーバーでホストされているWebアプリケーションでこの問題に直面していました。そのため、明らかにIISに直接アクセスできなかったため、ここで提案されている多くの解決策を適用することはできませんでした。

ホスティングプロバイダのコントロールパネルで、IISとASP.Netのエラーログを有効にしました。そして、そのエラーが実際に見つからないcshtmlにあることを知りました。

0
Dipendu Paul

これはおそらくOPにとって便利な解決策ではないかもしれませんが、それは同じ「エラー」メッセージに関するものです。

.NET 4.5が正しくインストールされたIIS8.5でPHPページをホストしています。

私たちはプリロード機能を利用して、アプリケーションが常に全面的に応答するようにしています。

しばらくすると、このエラーがランダムに発生し始めました。

Web.configでは、私はskipManagedModulesをtrueにしています - >これをしないでください!

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
<applicationInitialization skipManagedModules="false" doAppInitAfterRestart="true">
  <add initializationPage="/" />
</applicationInitialization>
...

ウェブサイトはphpですが、ページングへのルーティングはモジュールによって管理されています。

0
Schwarzie2478

私もその問題に出くわした。私のMVC4アプリはIIS 8.5のWindows Server 2012 R2上で動作しています。これらの投稿された解決策のどれも私のために働きませんでした... IIS機能を通して不足しているフレームワークをインストールすることはそれを解決したかもしれませんが、インストールはいつも失敗しました。

私はWeb Platform Installerを使用しなければならず、以下のパッケージをインストールしました:

enter image description here

0
Frank

私にとっては、サーバーからWebDAVを削除すると、アプリケーションがPUTname__またはDELETEname__を使用しているときに503 Service Unavailableエラーメッセージを返すため、再度インストールしました。また、.NET Framework 4.5を完全に削除して再インストールし、推奨どおりに再登録してみたが無駄でした。

PUTname__またはDELETEname__を使用している場合、個々のアプリケーションプールに対してWebDAVを無効にすることでこれを修正できました。

個々のアプリケーションプールに対してWebDAVを無効にします。

  1. 影響を受けるアプリケーションプールをクリックします
  2. リストからWebDAV Authoring Toolsを探す
  3. クリックして開く
  4. 右上のDisable WebDAVをクリックしてください。

Ta daaaa!

私はまだweb.configファイルに削除項目を残しました。

 <system.webServer>
    <modules>
      <remove name="WebDAVModule"/>
    </modules>
    <handlers>
      <remove name="WebDAV" />
    </handlers>
 <system.webServer>

このリンク は指示を見つけた場所ですが、あまり明確ではありません。

0
Luke

あなたはそれを修正することができますSystem.Web.DefaultHttpHandlerにiisの "ExtensionlessUrlHandler-Integrated-4.0"タイプを変更すること

0
user3661608