This blog post describes how to configure the AspNetCoreModule for hosting ASP .Net Core applications in IIS. The MSDN-documentation did not point me in the direction of a successful configuration on my first attempt, and it was hard to tell from the error logs what exactly was wrong.
Errors encountered for a invalid module configuration
When the AspNetCoreModule configuration is wrong, IIS will respond with a 502.5 error and an entry will be logged to Window’s System Event Log. Since the DotNet Core app fails before starting up, you will not see anything in the app log files.
HTTP Error 502.5 – Process Failure
The browser will return the following error page
Common causes of this issue:
- The application process failed to start
- The application process started but then stopped
- The application process started but failed to listen on the configured port
Troubleshooting steps:
- Check the system event log for error messages
- Enable logging the application process’ stdout messages
- Attach a debugger to the application process and inspect
For more information visit: https://go.microsoft.com/fwlink/?LinkID=808681
Event log message
The Windows Event Viewer will show a message similar to this, indicating that the commandline in web.config hasn’t been set correctly:
Application ‘MACHINE/WEBROOT/APPHOST/MYAPP’ with physical root ‘c:\MYAPPROOTPATH’ failed to start process with commandline ‘binIISSupportVSIISExeLauncher.exe -argFile IISExeLauncherArgs.txt’, ErrorCode = ‘0x80070002 : 0.
Failed request tracing log
Enabling failed request tracing for the web site will show a “Bad Gateway” error:
Web.config example
Assuming that the web server has been configured for hosting ASP .Net Core apps, the next step is to make sure that the aspNetCore module parameters are correct. For the example below, dotnet.exe must be available in the path for the user which runs the application pool. In the aspNetCore configuration element, processPath should be set to “dotnet.exe” and arguments should be set to the web application’s entry assembly name.
<?xml version="1.0" encoding="utf-8"?> | |
<configuration> | |
<system.webServer> | |
<handlers> | |
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" /> | |
</handlers> | |
<aspNetCore processPath="dotnet.exe" arguments="myApp.Web.dll" stdoutLogEnabled="false" > | |
<environmentVariables> | |
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Prod" /> | |
</environmentVariables> | |
</aspNetCore> | |
</system.webServer> | |
</configuration> |
Hosting an application targeting the full .Net framework
The aspNetCore module can also be used when hosting an application which targets the full .Net framework. The processPath parameter must then be set to the web application’s executable assembly and the arguments parameter can be set empty: