If you are planing to run an ASP.NET Core application with IIS then this blog post might be worth a glance.
These are a few issues I run into ...
If the project started with RC1 or earlier version of .NET Core then check for correct targets. Open the .xproj
file and search for the following line
<Import Project="$(VSToolsPath)\DotNet\Microsoft.DotNet.targets"
Condition="'$(VSToolsPath)' != ''" />
and replace it with
<Import Project="$(VSToolsPath)\DotNet.Web\Microsoft.DotNet.Web.targets"
Condition="'$(VSToolsPath)' != ''" />
If you get 502 after starting the web then take a look into windows event viewer. One of the errors you will probably see is
Application 'MACHINE/WEBROOT/APPHOST/YOUR-APP with physical root 'C:\webapp\publish\' created process with commandline '"dotnet" WebApp.Selfhost.dll' but either crashed or did not reponse or did not listen on the given port '28236', ErrorCode = '0x800705b4'
This error means that IIS is unable to start your app using the command dotnet
. To remedy this issue open web.config
and change the processPath
from dotnet
to C:\Program Files\dotnet\dotnet.exe
.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="C:\Program Files\dotnet\dotnet.exe"
arguments=".\WebApp.Selfhost.dll"
stdoutLogEnabled="false"
stdoutLogFile=".\logs\stdout"
forwardWindowsAuthToken="false" />
</system.webServer>
</configuration>
If you still getting 502 then the possible cause of this error may be that the your application is listening on a different port as expected. This can happen if one of your configuration keys is Port
. In this case your web is listening on this port instead of dynamically generated port.
The configuration of the WebHostBuilder
causing the error can look as following:
var hostBuilder = new WebHostBuilder()
.UseConfiguration(myConfig) // inserts config with key "Port"
.UseIISIntegration() // uses previously inserted port "by mistake"
.UseKestrel()
.UseStartup<Startup>();
To cure that just change the order of the calls because with .NET Core 1.1 the listening url when running with IIS will not been overwritten anymore.
var hostBuilder = new WebHostBuilder()
.UseIISIntegration()
.UseConfiguration(myConfig)
.UseKestrel()
.UseStartup<Startup>();