web-dev-qa-db-ja.com

統合管理パイプラインモードに適用されないASP.NET設定が検出されました

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"など)に切り替えます。アプリケーションを移行できない場合にのみこれを行ってください。
    ( "既定のWebサイト"と "Classic .NET AppPool"をアプリケーションパスとアプリケーションプール名に設定します)

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

376
Mikael

その2nd オプションはあなたが望むものです。

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

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

<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 6/Classicでも簡単です。IISは常にそれらのリクエストを処理するからです。 ASP.NETパイプラインへ。クラシックモードでは、ASP.NETはそれが言われていないことを知らず、IIS 6/Classicがそれを伝えていないかもしれないことがたくさんあります。

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

エラーを克服する:

  1. 元々IIS 6用に構築された古いアプリケーションを実行している場合は、おそらくそれを新しいサーバーに移動しても、そのアプリケーションのアプリケーションプールをクラシックモードで実行してもまったく問題ないことがあります。気分を悪くする必要はありません。
  2. それから再びあなたはあなたのアプリケーションにフェイスリフトを与えているか、あるいはあなたが手動で、または他の方法でNuGetを通してサードパーティのライブラリをインストールするまでそれはうまくいっていた。その場合、system.webhttpHandlersまたはhttpModulesが追加された可能性は十分にあります。 validateIntegratedModeConfigurationのデフォルトはtrueなので、結果はあなたが見ているエラーです。これで2つの選択肢があります。

    1. system.webからhttpHandlersおよびhttpModules要素を削除します。これには2つの可能性のある結果があります。
      • すべてうまくいき、よくある結果です。
      • あなたのアプリケーションは不平を言い続けています、あなたが受け継いでいる親フォルダの中にweb.configがあるかもしれません、そのweb.configもきれいにすることを考えてください。
      • NuGetパッケージがsystem.webに追加し続けているhttpHandlershttpModulesを削除するのにうんざりするようになりました。
  3. これらのオプションが機能しない、あるいはそれ以上の問題がある場合は、validateIntegratedModeConfigurationfalseに設定することはできないと言うつもりはありません。

良い読みます:

*そのようなことが好きなら、 wildcard mappings のような呪文を通してIIS 6/Classicからあらゆる種類の奇妙なことをASP.NETパイプラインに取り込む方法はもちろんあります。

103
Jeremy Cook

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

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

私はこの問題に遭遇しましたが、異なる修正をしました。これは、Control Panel>Administrative Tools>IIS Managerを更新し、私のAppサイトのManaged PipelineをIntegratedからClassicに戻すことを含みました。

31
Gaʀʀʏ

IIS認証に矛盾がないか確認してください。つまり、匿名認証とASP.NET偽装を有効にすると、両方ともエラーが発生する可能性があります。

7
Jim Yu

Web.configで、これらのキーが存在することを確認してください。

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

Asp.Net Impresonation =無効にする In IISサイト認証を確認する

3
Nil

これは私のために働いた:

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

私が最初にサイトを作成したときに何かが南に行ったようです。私はエラーの原因を知らずに "あなたのマシンを再起動し、次にWindowsを再インストールする"のような解決策を嫌います。しかし、これは私のために働いた。早くて簡単。他の人に役立つことを願っています。

2
Paul

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

  1. Web API(バージョン4.0.030506.0、別名旧バージョン)
  2. .NET 4.0
  3. Web APIのための属性ルーティング3.5.6 [ネタバレ警報:それはこの男だった!]

私は(残念ながら).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番目のジェレミーの言葉。症状を隠さなければならないとしても、あなたは自分が何をしているのか(そしてなぜなのか)知っています:-)

1

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

0

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

ありがとう

0
naveen rawat