การเริ่มต้นไซต์ ASP.NET Core 3.1 ใน IIS [ซ้ำกัน]

Aug 17 2020

ฉันไม่สามารถเริ่ม ASP.NET Core 3.1 ใน IIS (v10) ได้อย่างที่ฉันคาดหวัง ฉันเผยแพร่ไปยังไซต์ไปยังโฟลเดอร์เหมือนปกติ แต่เมื่อฉันทดสอบจากภายใน Windows Server 2019 VM ของฉันโดยไปที่ http: // localhost: 80 หรือ https: // localhost: 443 (ซึ่งทั้งสองไซต์เชื่อมโยงกับไซต์ IIS) ฉันเพิ่งได้รับการตอบสนอง 500.19 แต่ถ้าฉันป้อนจากบรรทัดคำสั่งdotnet MyWebApp.dllไซต์จะปรากฏที่ https: // localhost: 5001 /

เกิดอะไรขึ้น? เหตุใดพอร์ต 80 จึงไม่ทำงานโดยอัตโนมัติเนื่องจากมีการผูกไว้ใน IIS

มีเคล็ดลับในการทำงานนี้เพียงแค่คัดลอกไฟล์และใช้ IIS หรือฉันจำเป็นต้องใช้บรรทัดคำสั่งเพื่อเริ่มไซต์. NET Core 3.1?

คำตอบ

1 RoarS. Aug 18 2020 at 09:57

ตรวจสอบว่าคุณได้ทำสิ่งต่อไปนี้แล้ว:

  • ติดตั้ง Core Hosting Bundle ล่าสุด ถ้าไม่ไปที่นี่แล้วมองหา "Hosting Bundle"https://dotnet.microsoft.com/download/dotnet-core/3.1 (คุณควรไปที่นั่นเป็นประจำเวอร์ชันใหม่ทุกเดือนล่าสุดคือ 3.1.7 เมื่อเขียนสิ่งนี้)
  • ในแอพพูลตรวจสอบให้แน่ใจว่าไม่ได้เลือก. NET framework

เมื่อเผยแพร่ให้ใช้

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 / คุณกำลังเรียกใช้ Kestrel ไม่ใช่ IIS

JokiesDing Aug 18 2020 at 06:30

ดูเหมือนว่าคุณพลาดที่จะติดตั้งชุดรวมเว็บโฮสติ้ง Asp.net Core IIS ไม่รองรับแกน Asp.net ตามค่าเริ่มต้นแม้ว่าคุณจะสามารถเรียกใช้ใน Visual studio IIS express ได้ก็ตาม นอกจากนี้ IIS จะไม่ลงทะเบียนตัวจัดการ AspNetCore แม้ว่าคุณจะติดตั้งบันเดิลเว็บโฮสติ้งหลักของ asp.net

ดังนั้นโปรดตรวจสอบว่าคุณได้ลงทะเบียนโมดูลหลักของตัวจัดการและ asp.net ใน 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>

แน่นอนคุณสามารถเผยแพร่แอปพลิเคชันของคุณด้วย VS web deployment tool จะลงทะเบียนการกำหนดค่าเหล่านี้เมื่อคุณเผยแพร่โครงการ

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