web-dev-qa-db-ja.com

WebDAVとWebAPIが一緒になってエラーが発生します:ハンドラー「ExtensionlessUrlHandler-Integrated-4.0」のモジュールリストに不正なモジュール「ManagedPipelineHandler」があります

WebDAVをインストールして自分のサイトで実行していますが、仮想サブサイトとしてMVC WebAPIサイトがあり、PUTリクエストを送信しようとするまで、APIは正常に機能します。その後、次のエラーが発生します。

HTTPエラー500.21-内部サーバーエラー

ハンドラー "ExtensionlessUrlHandler-Integrated-4.0"のモジュールリストに不正なモジュール "ManagedPipelineHandler"があります

WebDAVを無効にすると、すべてが正常に機能し、エラーは発生しません。これは、WebDAVが有効になっている場合にのみ発生します。

Web.configに次のコードがすべて含まれています。

<system.webServer>
  <validation validateIntegratedModeConfiguration="false" />
  <modules runAllManagedModulesForAllRequests="false">
    <remove name="WebDAVModule" />
  </modules>
  <handlers>
    <remove name="WebDAV" />
    <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
    <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
    <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
    <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
    <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
  </handlers>
</system.webServer>

さまざまなアプリプールをいじってみました。

私はまた、これらすべての質問で言及されているすべてのものに疲れました:

このエラーを取り除く方法ハンドラー "PageHandlerFactory-Integrated"のモジュールリストに不正なモジュール "ManagedPipelineHandler"があります

ハンドラー "ExtensionlessUrlHandler-Integrated-4.0"のモジュールリストに不正なモジュール "ManagedPipelineHandler"があります

修正方法:ハンドラー "PageHandlerFactory-Integrated"のモジュールリストに不正なモジュール "ManagedPipelineHandler"があります

これのどれも私の問題を解決しませんでした、私が試したことのないものは他にありますか?

12
jblaske

私たちはこれでマイクロソフトに行くことになりました、彼らは戻ってくる前に数週間それをレビューしました同じサイトでWebDAVとWebAPIを実行することは不可能です

彼らは、IISの将来のリリースでこの問題に対処しようとします。

22
jblaske

@jblaskeは良い反応を示しています。

一時的に削除したい場合は、多分 この記事 が最善の解決策です。

ハンドラーをまとめて削除する場合は、次の手順に従います。

  1. IISを開き、問題のサイトに移動します。
  2. 「ハンドラーマッピング」をクリックします
  3. 「WebDAV」という名前のハンドラーを見つけます
  4. それを選択して削除します

これは私の 元の投稿 です。

4
christo8989

PUTを機能させるためにIISから手動でWebDAVモジュールとハンドラーを削除した後、このエラーが発生し始めました。このエラーを克服するには、「WebDAVPublishing」サーバーの役割を削除する必要がありました。この役割を削除した後、 IISを再起動すると、PUTは正常に機能しています。

enter image description here

1
Rajiv

ハンドラーの宣言にタイプミスの問題がある可能性があります。 Thomas Marquardtのブログによると

5.0トラブルシューティング

以下のようなエラーが発生した場合は、セクションが無効である可能性があります。

HTTPエラー500.21-内部サーバーエラーハンドラー ""のモジュールリストに不正なモジュール "ManagedPipelineHandler"が含まれています正しい前提条件がないハンドラーマッピングがある可能性があります。 IISはタイプミスに関して寛容ではなく、前提条件では大文字と小文字が区別されます。テキストはpreCondition =” IntegratedMode”またはpreCondition =” classicMode”である必要があります。

また、その記事へのコメントからの別の提案:

アンドリュージョンソン2011年1月25日午前3時20分#:

ハンドラーにrequireAccess = "None"がある場合、「ハンドラーのモジュールリストに不正なモジュールManagedPipelineHandlerがあります」も取得できることがわかりました。私の場合、これをrequireAccess = "Read"に変更すると、エラーがなくなりました。

そのコメントは、applicationHost.configのWebDavハンドラーのエントリが次のようになっているのであなたのケースに当てはまるかもしれません(requredAccess="None"に注意してください):

<add name="WebDAV" path="*" verb="PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK" modules="WebDAVModule" resourceType="Unspecified" requireAccess="None" />
0

この問題の代替案が見つかりました。サーバーのパッチがプッシュされると、デフォルトのフレームワークが2.0に戻されました。フレームワーク4.0フォルダーC:\ Windows\Microsoft.NET\Framework64\v4.0.30319に移動して、.Netフレームワークを再登録します。コマンドaspnet_regiis-Iを実行します。

Web.configをチェックして.Netフレームワークのバージョンと一致させます

IIS->アプリケーションプール)に移動し、.Netフレームワークの値を4.0に設定します。IISを再起動します。

0