統合マネージパイプラインモードでは適用されないASP.NET設定が検出されました


401

DotNetOpenAuth SDK-3.4.5.10201.vsixをインストールしましたが、機能しません。ローカルで動作します(localhostとして実行した場合)が、公開しようとしても機能しません。

表示される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してアプリケーションを移行すると、アプリケーションは統合モードで動作し、クラシックモードおよび以前のバージョンのIISで引き続き動作します。

  • このエラーを無視しても問題ない場合はsystem.webServer/validation@validateIntegratedModeConfiguration 、falseに設定して無効にでき ます。

  • または、アプリケーションをクラシックモードのアプリケーションプールに切り替えます(例:) %SystemRoot%\system32\inetsrv\appcmd set app "Default Web Site/" /applicationPool:"Classic .NET AppPool"。これは、アプリケーションを移行できない場合にのみ行ってください。
    (「Default Web Site」と「Classic .NET AppPool」をアプリケーションパスとアプリケーションプール名に設定します)

しかし問題は、私がISSサーバーの所有者ではないため、ISSサーバーにアクセスできないことです。これを解決する方法はありますか?

回答:


782

2 番目のオプションが必要なものです。

web.config、次のキーが存在することを確認してください。

<configuration>
    <system.webServer>
        <validation validateIntegratedModeConfiguration="false"/>
    </system.webServer>
</configuration>

10
これがアプリのセキュリティに実際に影響することはありません。使用されない設定値があることを示す警告をオフにするだけです。
David

19
使用されない設定がある場合、これは実際にはあまり健全なアドバイスではないので、それらを削除する必要があります。
Sep

33
@Seph、これは適切なアドバイスではないことに同意しません。多くのNuGetインストール(たとえば、DotLess)は、統合モードに適用されるセクションにエントリを追加し、非統合モードではその設定を複製します。これは移植性と呼ばれ、IIS7 /統合型またはクラシックを使用しているかどうかに関係なく、構成を機能させることができます。この検証設定をそのままにしておく唯一の理由trueは、統合モードでは機能しない設定を追加するときはいつでも、トレーニングホイールをオンのままにしてIISから怒鳴られるようにするためです。これは未経験者向けですが、邪魔になります。
カークウォル

5
この種の構成は面倒です。@MS:より良い方法があります。
yonexbat

3
症状をマスキングするよりもエラーを修正したい人のために、私は別の答えを投稿しました。NuGetパッケージに関して、なぜIIS 6 / Classicをターゲットにしているのですか?
Jeremy Cook、

104

追加<validation validateIntegratedModeConfiguration="false"/>は症状に対処しますが、すべての状況に適しているわけではありません。この問題を何度か経験したことで、他の人が問題を克服するだけでなく、理解するのを助けたいと思います。(これは、IIS 6が神話や噂になっているため、ますます重要になります。)

バックグラウンド:

この問題とそれを取り巻く混乱は、ASP.NET 2.0とIIS 7の導入から始まりました。IIS6には、パイプラインモードが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モジュールでそれを行うことはできません。 。*一方、IIS 6 / Classicでも、IISは常にASP.NETパイプラインに要求を渡すため、Foo.aspxの要求など、.ASPXページにアクセスできるユーザーを承認することは簡単です。クラシックモードでは、ASP.NETは何を持っているかを認識していません。

  • ASP.NETハンドラーおよびモジュールはIISパイプラインと直接対話できるため、統合モードが推奨されます。IISパイプラインは、単にASP.NETパイプラインに要求を渡すだけではなく、ASP.NETコードがIISパイプラインとそれにヒットするすべての要求に直接フックできるようになりました。これは、ASP.NETモジュールが静的画像ファイルへの要求を監視できるだけでなく、それらの要求を傍受し、アクセスの拒否、要求のログ記録などのアクションを実行できることを意味します。

エラーを克服する:

  1. IIS 6用に作成された古いアプリケーションを実行している場合、それを新しいサーバーに移動した可能性があります。そのアプリケーションのアプリケーションプールをクラシックモードで実行しても、まったく問題はありません。気を悪くする必要はありません。
  2. 次に、アプリケーションを一新するか、NuGet、手動、またはその他の方法でサードパーティのライブラリをインストールするまで問題なく動作している可能性があります。その場合、それは完全に可能であるhttpHandlersか、またはhttpModulesに追加されていsystem.webます。結果は、validateIntegratedModeConfigurationデフォルトであるために発生しているエラーですtrue。ここで2つの選択肢があります。

    1. httpHandlersおよびhttpModules要素をから削除しsystem.webます。これにはいくつかの結果が考えられます。
      • すべてが正常に機能し、共通の結果です。
      • アプリケーションは引き続き不平を言います。継承元の親フォルダーにweb.configがある可能性があります。そのweb.configもクリーンアップすることを検討してください。
      • あなたは削除するの飽きhttpHandlershttpModulesNuGetパッケージはに追加し続けることをsystem.web、ちょっとあなたに必要なものを行います。
  3. これらのオプションはない仕事をしたり、それは、私はあなたが設定することができないことを伝えるつもりはない価値があるよりも多くのトラブルの場合はvalidateIntegratedModeConfigurationfalse、しかし少なくとも、あなたは何をやっている知っていて、それが重要な理由。

良い読み取り:

*もちろん、ワイルドカードマッピングなどの呪文を使用して、IIS 6 / ClassicからASP.NETパイプラインにあらゆる種類の奇妙なものを取り込む方法があります。


+1のみのソリューションは問題の答えではなく、完全な答えである説明付きのソリューションです。それが何であり、なぜこれを変更する必要があるのか​​、@ Jeremyクックの回答によるこれらの回答の質問。
Rikin Patel、2016年

この説明により、IIS 7.5で統合モードでホストされている小さなテストサイトの問題を修正することにしました。新しいMVCプロジェクトを作成すると、Web.configにhttpModule、Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModuleが追加されました。これは、新しいASP.NET Web Aアプリケーションプロジェクトを作成するときに[プロジェクトにアプリケーションインサイトを追加]オプションをオンにしたためです。Web.configからhttpModuleを削除すると、サイトはエラーなしで機能しました。validateIntegratedModeConfigurationをfalseに設定することは機能しましたが、それは単なるバンドエイドアプローチでした。
iCode 2016

2
統合マネージパイプラインモードでは適用されないASP.NET設定が検出されました。これは、もう1つの役に立たないMicrosoftエラーメッセージです。ASP.netには何千もの設定がありますが、Microsoftはエラーの原因となっている設定をエラーテキストに含めるとは考えていませんでした。MSはエンジニアではなくマーケティング担当者によって運営されているので、すぐに改善することは期待しないでください。:-(
ポール・マッカーシー

35

それでもHTTPモジュールを使用する必要がある場合は、次のように構成する必要があります(.NET 4.0フレームワーク)。

<system.webServer>
   <modules runAllManagedModulesForAllRequests="true">
       <add name="MyModule" type="[Namespace].[Class], [assembly]"/>
   </modules>
   <validation validateIntegratedModeConfiguration="false"/>
</system.webServer>

2
system.webのHttpModulesプロパティはASP 3.5以前のものだと思います。ASP 4以降では、system.webserverのモジュールを使用します
Trio Cheung

1
@HoyCheungは、実際にはsystem.web / httpModulesとsystem.webServer / modulesのどちらを使用するかを決定する.Netのバージョンではなく、統合パイプラインまたはクラシックパイプラインを使用することの問題です。
PauliØsterø2016年

29

私はこの問題に遭遇しましたが、別の修正がありました。これにはControl Panel>Administrative Tools>IIS Manager、アプリサイトのマネージパイプラインの更新とからIntegratedへの復帰が含まれていましたClassic


3
同意-これは、エラーを非表示にするだけではなく、より良いオプションです!正しいアプリケーションプールを使用していることを確認してください-クラシックではなく統合されている必要があります
Swomble

1
Visual Studio 2012を使用していますが、アプリプールをクラシックに変更するにはどうすればよいですか?

10
統合パイプラインで利用可能なすべての新機能を使用したい場合、これは良い解決策ではありません。これは、問題のために4.0から.NET 2.0に戻すと言うようなものです。
Trevor de Koekkoek 2014

IISマネージャーでこれを行うApplication Poolsには、左側のツリーに移動し、変更するプールをダブルクリックして、パイプラインモードを選択します。
スティーブスミス

8

IIS認証に競合がないか確認してください。つまり、匿名認証を有効にすると、ASP.NET偽装もエラーを引き起こす可能性があります。


5

web.configに次のキーが存在することを確認してください:

<configuration>
    <system.webServer>
        <validation validateIntegratedModeConfiguration="false"/>
    </system.webServer>
</configuration>

Asp.Net Impresonation = IISサイト認証で無効にするだけでなく、


3

私はこの問題に遭遇し、@ Jeremy Cookの回答に触発され、弾丸をかじってIIS 7統合モードが私のweb.configを好きではなくなった原因を突き止めました。これが私のシナリオです:

  1. Web API(バージョン4.0.030506.0別名古いバージョン)
  2. .NET 4.0
  3. Attribute Routing 3.5.6 for Web API [ネタバレ注意:それはこの男だった!]

(残念ながら).NET 4を使用する必要があり、Web API 2.2(.NET 4.5が必要)を使用できないプロジェクトで属性ルーティングを使用したいと思いました。適切な意味の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を通過できます。

概要: 私はジェレミーの言葉の2番目に、「症状を隠す」だけでなく、なぜうまくいかないのかを理解することが重要であると述べています。症状を隠す必要がある場合でも、あなたは自分が何をしているか(そしてその理由)を知っています:-)


ありがとう。ApiコントローラーアドオンNuGetパッケージを含むAttributeRoutingを追加し、web.configから指定したセクションを削除して問題を解決しました。ただし、私のMVC Webアプリは既に.NET Framework 4.5を使用しているため、少し心配です。
ロバート・オシュラー、2015

2
@RobertOschler .NET 4.5を使用している場合、すでにAFAIKに属性ルーティングが組み込まれています。このNuGetは必要ありませんか?
Sudhanshu Mishra 2015

ありがとう、がらくた。今日、数時間かけてNuGetを実行するAttributeRoutingパッケージを取得しました。私はそれを引き出して、機能させるために追加したすべてのコード「修正」を元に戻し、GET()属性をWeb API 2 Route()属性に置き換えました。うまくいきました。最近、これらすべてのパッケージを手助けするために、エキスパートシステムが本当に必要です。
Robert Oschler、2015

2

これは私のために働きました:

  1. 最初に作成したサイトを削除します。
  2. IISでサイトを再作成する
  3. クリーンなソリューション
  4. ソリューションを構築する

最初にサイトを作成したとき、何かが南に行ったようです。エラーの原因を知らずに、「マシンを再起動してからウィンドウを再インストールする」のような解決策は嫌いです。しかし、これは私にとってはうまくいきました。すばやく簡単。それが他の誰かを助けることを願っています。


0

私の場合、web.configファイルで参照されているbinフォルダーにdllがありませんでした。したがって、web.configの設定を使用していたが、実際にはdllがないかどうかを確認してください。

ありがとう


0

このエラーについてここで見つけたすべての設定は同じでしたが、それでも機能しなかったため、これを解決するのに数時間かかりました。問題は、WinCEデバイスにファイルを送信するフォルダーがWebサービスにあることでした。そのフォルダーをClassic.NetAppPoolを使用するアプリケーションに変換した後、そのフォルダーが機能し始めました。


0

以下の手順で問題が解決しました:

CMD管理者権限でプロンプトを開きます。

実行: iisreset.

お役に立てれば。


-1

ローカルの方法はエラーです

画像


7
何をしているのか本当に理解していない限り、この設定を変更しないでください。これはほとんど正解ではありません。
NickG 2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.