c# - validateintegratedmodeconfiguration - マネージパイプラインモード 違い
統合管理パイプラインモードには適用されないASP.NET設定が検出されました (8)
私はDotNetOpenAuth SDK-3.4.5.10201.vsixをインストールしましたが、動作させることはできません。 ローカルで動作しますが(ローカルホストとして動作する場合)、公開しようとすると動作しません。
取得するIISエラーメッセージは
エラーの概要
HTTPエラー500.22 - 内部サーバーエラー
統合管理パイプラインモードには適用されないASP.NET設定が検出されました。
そして
Module ConfigurationValidationModule Notification BeginRequest Handler StaticFile Error Code 0x80070032
問題を解決する方法に関するいくつかの提案があります:
あなたが試すことができるもの:
構成を
system.webServer/modules
セクションに移行します。 手動で行うことも、コマンドラインからAppCmdを使用することもできます。たとえば、%SystemRoot%\system32\inetsrv\appcmd migrate config "Default Web Site/"
ます。AppCmd
を使用してアプリケーションを移行すると、アプリケーションは統合モードで動作し、Classicモードと以前のバージョンのIISで引き続き動作します。このエラーを無視しても問題ないことが確かな場合は、
system.webServer/[email protected]
をfalseに設定して無効にすることができます。別の方法として、アプリケーションをClassicモードのアプリケーションプールに切り替えます。たとえば、
%SystemRoot%\system32\inetsrv\appcmd set app "Default Web Site/" /applicationPool:"Classic .NET AppPool"
ます。 アプリケーションを移行できない場合にのみ、これを実行してください。
( "Default Web Site"と "Classic .NET AppPool"をアプリケーションパスとアプリケーションプール名に設定します)
しかし、問題は、ISSサーバーの所有者ではないため、ISSサーバーにアクセスできないということです。 これを解決する方法はありますか?
2 番目のオプションは、あなたが望むものです。
web.config
、次のキーが存在することを確認します。
<configuration>
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
</system.webServer>
</configuration>
IIS認証に競合がないかどうかを確認します。 つまり、匿名認証を有効にして、ASP.NET偽装によってエラーが発生する可能性があります。
<validation validateIntegratedModeConfiguration="false"/>
追加すると、症状に対処できますが、すべての状況に適切ではありません。 この問題を数回巡って、他の人が問題を克服するだけでなく、それを理解できるように願っています。 (IIS 6が神話や噂に変わるにつれてますます重要になります)。
バックグラウンド:
この問題とそれを取り巻く混乱は、ASP.NET 2.0とIIS 7の導入から始まりました。IIS 6には1つのパイプラインモードしかなく、引き続きIIS 7+が「クラシック」モードと呼ぶのと同等です。 IIS 7以降で動作するすべてのアプリケーションの2番目の、より新しい、そして推奨されるパイプラインモードは、「統合」モードと呼ばれます。
では、違いは何ですか? 主な違いは、ASP.NETとIISとのやりとりがどのように異なるかです。
クラシックモードは、IISパイプラインと対話できないASP.NETパイプラインに限定されています。 基本的に要求が送信され、IIS 6 / Classicにサーバー構成を介してASP.NETが処理できることが伝えられたら、IISは要求をASP.NETに渡して移動します。 これの重要性は、例から集めることができます。 静的イメージファイルへのアクセスを許可する場合は、IIS 6パイプラインがこれらの要求自体を処理し、決して手渡されなかったためにASP.NETがそれらの要求を見ることはないため、ASP.NETモジュールではできません*一方、Foo.aspxの要求などのユーザーが.ASPXページにアクセスできるようにすることは、IISがこれらの要求を常にASP.NETパイプラインに渡すため、IIS 6 / Classicでも些細なことです。 クラシックモードでは、ASP.NETは何が伝えられていないか分からず、IIS 6 / Classicがそれを伝えていないかもしれないことがたくさんあります。
ASP.NETハンドラとモジュールはIISパイプラインと直接対話できるため、 統合モードをお勧めします。 もはやIISパイプラインはASP.NETパイプラインにリクエストを渡すだけでなく、ASP.NETコードがIISパイプラインに直接フックすることができます。 これは、ASP.NETモジュールが静的なイメージファイルへの要求を観察できるだけでなく、それらの要求を傍受し、アクセスを拒否したり、要求を記録したりすることによってアクションを実行することを意味します。
エラーの克服:
- もともとIIS 6向けに作成された古いアプリケーションを実行している場合、新しいサーバーに移動した可能性がありますが、クラシックモードでそのアプリケーションのアプリケーションプールを実行しても問題はありません。 あなたは悪く感じる必要はありません。
それでは、おそらくあなたのアプリケーションに顔を上げたり、NuGetを介してサードパーティのライブラリをインストールするまで、手動で、または他の手段でうまくいっていたかもしれません。 その場合、
httpHandlers
またはhttpModules
がsystem.web
追加されている可能性がありsystem.web
。 結果は、validateIntegratedModeConfiguration
デフォルト値がtrue
ため、表示されているエラーtrue
。 これで2つの選択肢があります:-
system.web
からhttpHandlers
およびhttpModules
要素を削除しsystem.web
。 これから可能な結果がいくつかあります:- すべてがうまく動作し、共通の結果です。
- あなたのアプリケーションは引き続き文句を言います。あなたが継承している親フォルダにweb.configがあるかもしれません。
- あなたは、NuGetパッケージが
system.web
に追加し続けるhttpHandlers
とhttpModules
を削除するのにうんざりしています。
-
- これらのオプションがうまくいかない場合や、それ以上の問題がある場合は、
validateIntegratedModeConfiguration
をfalse
に設定validateIntegratedModeConfiguration
ことはできませんが、少なくともあなたが何をしているのか、なぜ重要なのかを知ることはできません。
良い読書:
*もちろん、IIS 6 / ClassicのASP.NETパイプラインには、 ワイルドカードマッピングなどの奇妙なことがあります。
ここで私がこのエラーについて見つけた設定はすべて同じだったので、これを解決するのに数時間かかりましたが、それでも動作しませんでした。 問題は私がWebサービスにWinCEデバイスに送信するフォルダを持っていて、そのフォルダをClassic.NetAppPoolでアプリケーションに変換した後に動作するようになったことです。
それでもHTTPモジュールを使用する必要がある場合は、次のように構成する必要があります(.NET 4.0フレームワーク)。
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="MyModule" type="[Namespace].[Class], [assembly]"/>
</modules>
<validation validateIntegratedModeConfiguration="false"/>
</system.webServer>
私はこの問題に遭遇し、@ Jeremy Cookの答えに触発されました。私は、heckがIIS 7の統合モードで私のweb.configが嫌になった原因を突き止めました。 ここに私のシナリオがあります:
- Web API(バージョン4.0.030506.0、別名旧バージョン)
- .NET 4.0
- Web API用の属性ルーティング3.5.6 [スポイラー警告:それはこの男でした!]
私は、(残念なことに).NET 4を使用しなければならなかったため、Web API 2.2(.NET 4.5が必要)を使用できなかったプロジェクトで属性ルーティングを使いたいと思っていました。 Well意味のNuGetパッケージは、このセクションを<system.web>
セクションの下に追加しました:
<system.web>
<httpHandlers>
<add verb="*" path="routes.axd" type="AttributeRouting.Web.Logging.LogRoutesHandler, AttributeRouting.Web" />
</httpHandlers>
</system.web>
[私は、この部分はIISの古いバージョンでは必要なので、意味があると言います]
このセクションを削除すると、HTTP 500.23を越えてしまいました!!
要約:ジェレミーの言葉の第二は、「症状を隠す」よりも、何がうまくいかないのかを理解することが重要であるということです。 あなたが症状を隠さなければならない場合でも、あなたはあなたが何をしているのかを(そしてなぜ)知っていますか:-)
私はこの問題に遭遇しましたが、別の修正がありました。 Control Panel>Administrative Tools>IIS Manager
を更新し、アプリケーションサイトの管理対象パイプラインをIntegrated
からClassic
戻しました。