Memulai Situs ASP.NET Core 3.1 di IIS [duplikat]
Saya belum dapat memulai ASP.NET Core 3.1 saya di IIS (v10) seperti yang saya harapkan. Saya menerbitkan ke situs ke folder seperti biasa, tetapi ketika saya menguji dari dalam VM Windows Server 2019 saya dengan membuka http: // localhost: 80 atau https: // localhost: 443 (ke keduanya situs IIS terikat), Saya baru saja mendapat tanggapan 500,19. TAPI jika dari command line, saya masuk dotnet MyWebApp.dll
, maka situs tersebut TIDAK tampil di https: // localhost: 5001 /.
Apa yang sedang terjadi? Mengapa port 80 tidak bekerja secara otomatis, mengingat port tersebut terikat di IIS?
Apakah ada beberapa trik untuk membuat ini berfungsi hanya dengan menyalin file dan menggunakan IIS, atau apakah saya WAJIB menggunakan baris perintah untuk memulai situs .NET Core 3.1?
Jawaban
Pastikan Anda telah melakukan hal berikut:
- Paket hosting Core terbaru yang diinstal. Jika tidak, buka di sini dan cari "Paket Hosting"https://dotnet.microsoft.com/download/dotnet-core/3.1 (Anda harus pergi ke sana secara teratur, versi baru setiap bulan, yang terbaru adalah 3.1.7 saat menulis ini)
- Di kumpulan aplikasi, pastikan .NET framework tidak dipilih
Saat mempublikasikan, gunakan
Deployment Mode = Framework-Dependent
Target Runtime = win-x64
Di profil terbitkan Anda (Anda menemukan file ini di folder proyek /Properties/PublishProfiles/YourProfileName.pubxml) setelah menyimpan profil, Anda memerlukan
<EnvironmentName>Production</EnvironmentName>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
InProcess adalah opsi tercepat saat menggunakan IIS. Saat menjalankan publish, ini akan berakhir di web.config yang Anda buat seperti ini
<?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>
Saat menerapkan ke server penahapan, buat profil terbitkan baru, dan gunakan
<EnvironmentName>Staging</EnvironmentName>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
Ketika Anda mendapatkan jawaban dari https: // localhost: 5001 / Anda menjalankan Kestrel, bukan IIS
Sepertinya Anda ketinggalan untuk menginstal bundel hosting web Asp.net Core. Inti Asp.net tidak didukung oleh IIS secara default bahkan Anda dapat menjalankannya di Visual studio IIS express. Selain itu, IIS tidak akan mendaftarkan penangan AspNetCore bahkan ketika Anda menginstal bundel hosting web inti asp.net.
Jadi pastikan Anda telah mendaftarkan modul inti handler dan asp.net di 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>
Tentu saja, Anda dapat mempublikasikan aplikasi Anda dengan alat penyebaran web VS. Ini akan mendaftarkan konfigurasi ini ketika Anda mempublikasikan proyek.
https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/?view=aspnetcore-3.1