Starting ASP.NET Core 3.1 Site in IIS [duplicate]

故事扮演 提交于 2020-08-20 12:07:53

问题


I have not been able to start my ASP.NET Core 3.1 in IIS (v10) the way I would expect. I publish to site to folders like normal, but when I test from within my Windows Server 2019 VM by going to http://localhost:80 or https://localhost:443 (to both of which the IIS site is bound), I just get a 500.19 response. BUT if from the command line, I enter dotnet MyWebApp.dll, then the site DOES appear at https://localhost:5001/.

What's going on? Why isn't port 80 working automatically, given that it's bound there in IIS?

Is there some trick to make this work just by copying the files over and using IIS, or am I REQUIRED to use the command line to start a .NET Core 3.1 site?


回答1:


Make sure you've done the following:

  • Installed Core hosting bundle. If not, go here and look for "Hosting Bundle" https://dotnet.microsoft.com/download/dotnet-core/3.1 (you should go there on regular basis, a new version about every month, latest is 3.1.7 when writing this)
  • In app pool, make sure .NET framework is not selected

When publish, use

Deployment Mode = Framework-Dependent
Target Runtime = win-x64

In your publish profile (you find this file in project folder /Properties/PublishProfiles/YourProfileName.pubxml) after saving the profile, you'll need

<EnvironmentName>Production</EnvironmentName>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>

InProcess is the fastest option when using IIS. When running publish, this will end up in your generated web.config like this

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath=".\YourWebApp.exe" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="InProcess">
      <environmentVariables>
        <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Production" />
      </environmentVariables>
    </aspNetCore>
  </system.webServer>
</configuration>

When deploying to a staging server, create a new publish profile, and use

<EnvironmentName>Staging</EnvironmentName>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>

When you get answer from https://localhost:5001/ you are running Kestrel, not IIS




回答2:


It seems that you missed to install Asp.net Core web hosting bundle. Asp.net core is not supported by IIS by default even you can run it in Visual studio IIS express. Besides, IIS won't register AspNetCore handler even when you install asp.net core web hosting bundle.

So please ensure you have registered the handler and asp.net core module in web.config

<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="dotnet" arguments=".\MyWebApp.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
    </system.webServer>
  </location>

Of course, you can publish your application with VS web deployment tool. It will register these configuration when you publish the project.

https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/?view=aspnetcore-3.1



来源:https://stackoverflow.com/questions/63461854/starting-asp-net-core-3-1-site-in-iis

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!