IIS에서 ASP.NET Core 3.1 사이트 시작 [중복]

Aug 17 2020

IIS (v10)에서 예상대로 ASP.NET Core 3.1을 시작할 수 없었습니다. 평소와 같이 폴더에 사이트에 게시하지만 http : // localhost : 80 또는 https : // localhost : 443 (둘 다 IIS 사이트가 바인딩 된)로 이동하여 Windows Server 2019 VM 내에서 테스트 할 때, 500.19 응답을 받았습니다. 그러나 명령 줄에서를 입력 dotnet MyWebApp.dll하면 사이트가 https : // localhost : 5001 /에 나타납니다.

무슨 일이야? IIS에 바인딩되어 있는데 포트 80이 자동으로 작동하지 않는 이유는 무엇입니까?

파일을 복사하고 IIS를 사용하여이 작업을 수행하는 몇 가지 트릭이 있습니까? 아니면 명령 줄을 사용하여 .NET Core 3.1 사이트를 시작해야합니까?

답변

1 RoarS. Aug 18 2020 at 09:57

다음을 수행했는지 확인하십시오.

  • 최신 Core 호스팅 번들을 설치했습니다. 그렇지 않은 경우 여기로 이동하여 "호스팅 번들"을 찾으십시오.https://dotnet.microsoft.com/download/dotnet-core/3.1 (당신은 정기적으로 거기에 가야합니다. 매월 새 버전이 있으며 이것을 작성할 때 최신 버전은 3.1.7입니다)
  • 앱 풀에서 .NET 프레임 워크가 선택 되지 않았 는지 확인

게시 할 때

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

프로필을 저장 한 후 게시 프로필 (프로젝트 폴더 /Properties/PublishProfiles/YourProfileName.pubxml에서이 파일을 찾을 수 있음)에서 다음이 필요합니다.

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

InProcess는 IIS를 사용할 때 가장 빠른 옵션입니다. 게시를 실행하면 다음과 같이 생성 된 web.config에서 끝납니다.

<?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>

스테이징 서버에 배포 할 때 새 게시 프로필을 만들고

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

https : // localhost : 5001 /에서 응답을 받으면 IIS가 아닌 Kestrel을 실행하는 것입니다.

JokiesDing Aug 18 2020 at 06:30

Asp.net Core 웹 호스팅 번들을 설치하지 못한 것 같습니다. Asp.net 코어는 Visual Studio IIS Express에서 실행할 수 있더라도 기본적으로 IIS에서 지원되지 않습니다. 게다가 IIS는 asp.net 코어 웹 호스팅 번들을 설치하더라도 AspNetCore 핸들러를 등록하지 않습니다.

따라서 web.config에 핸들러 및 asp.net 코어 모듈을 등록했는지 확인하십시오.

<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>

물론 VS 웹 배포 도구를 사용하여 애플리케이션을 게시 할 수 있습니다. 프로젝트를 게시 할 때 이러한 구성을 등록합니다.

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