将 DotNetCore MVC 项目成功部署到 IIS 上,记录下配置要点:
1.在 ASP.NET Core 应用中使用 Kestrel
Microsoft.AspNetCore.App 元包中包括 Microsoft.AspNetCore.Server.Kestrel 包(ASP.NET Core 2.1 或更高版本)。The Microsoft.AspNetCore.Server.Kestrel package is included in the Microsoft.AspNetCore.App metapackage (ASP.NET Core 2.1 or later).
默认情况下,ASP.NET Core 项目模板使用 Kestrel。ASP.NET Core project templates use Kestrel by default. 在 Program.cs 中,模板代码调用 CreateDefaultBuilder,后者在后台调用 UseKestrel。
public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>();
若要在调用 CreateDefaultBuilder
后提供其他配置,请调用 UseKestrel:
public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .UseKestrel(options => { // Set properties and call methods on options });
想知道详细的 options 配置的请点这里
在 ConfigureServices(IServiceCollection services)中加入 IIS 服务代码:
public void ConfigureServices(IServiceCollection services) { // ... services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); services.Configure<IISOptions>(options => { options.ForwardClientCertificate = false; }); }
2、发布网站,我用的文件方式:
发布时注意勾选上“在发布前删除所有现有文件”。
3、IIS安装服务器上安装DotNetCore.X.X.X-WindowsHosting安装成功后重启IIS服务器。
根据版本选择下载 下载地址:https://www.microsoft.com/net/download/windows
4、部署之前要确保你的IIS上已经安装了AspNetCoreModule托管模块
5.设置应用程序池的.NET CLR版本为“无托管代码”
因为,IIS是作为一个反向代理的角色,并不需要它来托管代码
6、经测试,DotNetCore 项目,可以部署为网站下的一个“应用程序”
7、总结
.Net Core 和 传统的.Net 程序IIS部署主要注意以下几点:
- 网站程序的 IIS 适配修改。
- 安装DotNetCore.X.X.X-WindowsHosting和.Net Core SDK
- 应用池配置为无托管代码(网上解释:ASP.NET Core不再是由IIS工作进程(w3wp.exe)托管,而是使用自托管Web服务器(Kestrel)运行,IIS则是作为反向代理的角色转发请求到Kestrel不同端口的ASP.NET Core程序中,随后就将接收到的请求推送至中间件管道中去,处理完你的请求和相关业务逻辑之后再将HTTP响应数据重新回写到IIS中,最终转达到不同的客户端(浏览器,APP,客户端等)。而配置文件和过程都会由些许调整,中间最重要的角色便是AspNetCoreModule,它是其中一个的IIS模块,请求进入到IIS之后便立即由它转发,并迅速重定向到ASP.NET Core项目中,所以这时候我们无需设置应用程序池来托管我们的代码,它只负责转发请求而已)
- 如果需要读写根目录权限,要更改应用池 ApplicationPoolIdentity
- 网站报错,通过修改web.config 启用错误日志查看详细错误信息