IIS Expressで動作するASP.NET Coreアプリがあります。同様に、dotnet run
を介してコマンドラインからアプリを起動すると、すべてがスムーズに動作します。
C:\Code\Sandbox\IisTestApp\IisTestApp>dotnet run
Using launch settings from C:\Code\Sandbox\IisTestApp\IisTestApp\Properties\launchSettings.json...
Hosting environment: Production
Content root path: C:\Code\Sandbox\IisTestApp\IisTestApp
Now listening on: http://localhost:5000
Now listening on: https://localhost:5001
Application started. Press Ctrl+C to shut down.
ローカルIISをターゲットにしようとすると、次のエラーが発生します。
プロセスC:\ Program Files\dotnet\dotnet.exeを開始できません。 Webサーバー要求は、ステータスコード500、内部サーバーエラーで失敗しました。完全な応答はC:\ Users {my user name}\AppData\Local\Temp\HttpFailure_08-05-50.htmlに書き込まれました。
HTMLファイルには、次の情報が含まれています。
HTTPエラー500.19-内部サーバーエラー
ページの関連構成データが無効であるため、要求されたページにアクセスできません。
詳細なエラー情報:
モジュールIIS Web Core
通知BeginRequest
Handlerまだ決定されていません
エラーコード0x8007000d
構成エラー
構成ファイル\?\ C:\ Code\Sandbox\IisTestApp\IisTestApp\web.config
リクエストされたURLhttp:// localhost:80/IisTestApp
物理パスC:\ Code\Sandbox\IisTestApp\IisTestApp
ログオン方法まだ決定されていません
ログオンユーザーまだ決定されていません
注:このメッセージから明らかでない場合、これは私の問題の最小限の再現であり、実際のアプリではありません
オンラインで見たほとんどの場合、エラーコード0x8007000d
は.NET Core Windows Server Hostingコンポーネント(AspNetCoreModule
)がないことを示していますが、確実にインストールしました。
また、IISのメインの[モジュール]ページでも確認でき、このファイルが指すファイルが実際に存在することを確認しました。
不思議なことに、この特定のサイトのモジュールページに移動しようとすると、Webページと同じエラーメッセージが表示されます。
この操作の実行中にエラーが発生しました。
詳細:
ファイル名:\?\ C:\ Code\Sandbox\IisTestApp\IisTestApp\web.config
エラー:
このホスティングモジュールのバージョン(2.1.8)は、私がインストールしたものとほぼ一致します。
C:\Users\{my user name}>dotnet --list-sdks
2.1.202 [C:\Program Files\dotnet\sdk]
2.1.504 [C:\Program Files\dotnet\sdk]
C:\Users\{my user name}>dotnet --list-runtimes
Microsoft.AspNetCore.All 2.1.4 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.1.8 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.App 2.1.4 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.1.8 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.NETCore.App 2.0.9 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 2.1.8 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
そして、私のテストアプリが対象としているもの:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.1.2" PrivateAssets="All" />
</ItemGroup>
</Project>
それでも、問題は本当にIISとそのホスティングコンポーネントに関連していると思います!プロジェクトテンプレートで生成された(非常にデフォルトの)web.configは次のとおりです。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="bin\IISSupport\VSIISExeLauncher.exe" arguments="-argFile IISExeLauncherArgs.txt" stdoutLogEnabled="false">
<environmentVariables />
</aspNetCore>
</system.webServer>
</location>
</configuration>
注:processPathでフルパスをハードコーディングするか、.\
相対パスを使用しても、同じエラーメッセージが表示されます
<aspNetCore>
ノードを削除すると、別のエラーが発生します。
HTTPエラー502.3-不正なゲートウェイ
リクエストをルーティングしようとしたときに接続エラーが発生しました。
詳細なエラー情報:
ModuleAspNetCoreModule
通知ExecuteRequestHandler
HandleraspNetCore
エラーコード0x80070490
リクエストされたURLhttp:// localhost:80/IisTestApp
物理パスC:\ Code\Sandbox\IisTestApp\IisTestApp
ログオン方法匿名
ログオンユーザー匿名
ポイントは、AspNetCoreModule
が今回エラーをスローするため、isがロードされ、コードが実行されていることです。
別のフォルダーに公開し、IISでサイトを手動で設定します(Visual Studioのデフォルトの動作であるIIS Webサイトがbin "フォルダー)でも同じエラーメッセージが表示されますが、生成されたweb.configファイルでaspNetCore
ノードが少し異なります。
<aspNetCore processPath="dotnet" arguments=".\IisTestApp.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout">
<environmentVariables />
</aspNetCore>
IISがこのアプリケーションの実行に失敗する原因は何ですか?
.NET Core(SDK、ランタイム、ホスティングコンポーネント)を再インストールしようとしましたが、役に立ちませんでした。
また、IISのURL書き換えモジュールのインストールについて言及しているいくつかの投稿に気づきました(特にこれ: HTTPエラー500.19-IIS 7.5エラー0x8007000d )。私のweb.configはそのモジュールについて言及していませんが、AspNetCoreModuleが内部で使用する場合に備えてインストールしようとしましたが、これは私の状況では役に立ちませんでした。
私(および多くの役立つコメンター、特に Daboul )が考えることができるアプリ固有のすべてを除外し、目に見えるIIS設定を確認した後、 IIS全体としてのプライマリ構成ファイルを見てください:applicationHost.config
ApplicationHost.configの概要 に従って、このファイルは%windir%\system32\inetsrv\config
にあります。実際のアプリケーションはオフィスの別のマシンで動作しているので、diffプログラムを使用してそれらを比較したところ、次のノードが構成ファイルにないことがわかりました。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<configSections>
<!-- ...lots of other stuff... -->
<sectionGroup name="system.webServer">
<!-- ...lots of other stuff... -->
<!--This "section" node for aspNetCore is the one that was missing-->
<section name="aspNetCore" overrideModeDefault="Allow" />
その1つのノードを追加すると、エラーが解決しました。
奇妙なことに、AspNetCoreModule自体は、後でファイル内で複数回参照されます。以前にこのファイルを手動で編集したことがないため、AspNetCoreModuleを初めてインストールするときに、これが何らかのインストールエラーであった可能性があります。
上記の提案を試してみましたが、うまくいきませんでした。そのため、Asp Net Coreランタイムホスティングを管理者モードで再インストールし、ApplicationHost.Configを修正しました。
.NET Core Hosting Bundleをインストールすると、問題が解決しました。 ここ は.NET Core Hosting Bundleへのリンクです。
.NET Core 3.1の使用