以前、ASP.NET Core アプリケーションを IIS でホストする場合について記事を書きましたが、環境やアプリケーションによってはいろいろはまることがあったので、メモしておきます。
ちなみに前回の記事は以下です。
以下、私が遭遇した事象についてです。
アプリケーションが起動しない
以下のような画面が表示され、アプリケーションが起動しませんでした。
An error occurred while starting the application.
まずはログを出力するように変更する
状況がわからないので、ログを出力するように設定を変更します。
Web.config
を開き、stdoutLogEnabled
を true
にします。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath=".\MyApplication.exe" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" />
</system.webServer>
</location>
</configuration>
<!--ProjectGuid: 77400ADB-8E48-46B3-AACD-4DF7C81A1A89-->
logs
フォルダに stdout_xxx.log
というファイルが作成されるようになります。
それでもログが出力されない
アプリケーションプールの実行ユーザーにファイル書き込みの権限がない場合は、上記の設定を行ってもログが出力されません。
以下のサイトを参考に設定を行いました。
手動だとアプリケーションが起動するが、IIS 経由だとアプリケーションが起動しない
exe
をダブルクリックしたり、dotnet
コマンドからアプリケーションを起動した場合は問題なく起動するのに、IIS 経由だとアプリケーションが起動しないことがありました。
環境変数の Path
に設定されている場所を参照して dll を読み込んでいる処理があったのですが、ユーザー環境変数にのみ設定され、システム環境変数には設定されていないことが原因でした。
手動でアプリケーションを起動する場合は現在ログイン中のユーザーで実行されますが、IIS 経由の場合、アプリケーションプールの実行ユーザーになるためです。
この場合、システム環境変数に設定を行うことでアプリケーションが起動するようになりました。
外部からアクセスできない
以下が参考になるかもしれません。
アプリケーションを自動起動する
デフォルトだとサイトにアクセスするまでアプリケーションが起動しませんが、IIS 起動時にアプリケーションも起動するようにしたい場合があります。
これについては以下の記事が参考になりました。