使用 IIS 在 Windows 上托管 ASP.NET Core .NET Core部署到Windows IIS最全解决方案

回顾之前的ASP.NET的经典托管
image.png
在经典ASP.NET应用程序中,所有一切都托管在IIS工作进程中(w3wp.exe),这也被称为IIS应用程序池。ASP.NET程序被托管在应用程序池中,并且被按照IIS内建的ASP.NET托管特性所实例化。当请求从http.sys传入到ASP.NET应用程序管道时,本地运行时管理器会实例化一个代表应用程序的.NET运行时,同时引入HttpRuntime对象用来处理这个请求。来自http.sys的请求被派送到对应的应用程序池HttpRuntime实例的托管站点。
image.png
.net coreASP.NET发布有点不一样,ASP.NET Core不再由IIS工作进程(w3wp.exe)托管,而是使用自托管Web服务器(Kestrel)运行,IIS则是作为反向代理的角色转发请求到Kestrel不同端口的ASP.NET Core程序中,随后就将接收到的请求推送至中间件管道中去,处理完你的请求和相关业务逻辑之后再将HTTP响应数据重新回写到IIS中,最终转达到不同的客户端(浏览器,APP,客户端等)。
如果你的应用只接收来自内部网络的请求,你可以只使用Kestrel本身。
image.png
如果你将你的应用部署在公共网络上,我们建议你使用IISNginx或者Apache作为反向代理服务器。一个反向代理服务器接收来自网络的HTTP请求并且在经过一些初步处理后将请求传递到Kestrel服务器。因为Kestrel不支持在多进程间分享同一端口,所以应用并不能直接和Kestrel合作。当你在某个端口上配置Kestrel运行侦听时,不算主机头如何标识,Kestrel会为该端口处理所有的流量。反向代理可以为多个应用共享唯一端口并将流量发送给Kestrel
image.png
AspNetCoreModule,它是其中一个的IIS模块,请求进入到IIS之后便立即由它转发,并迅速重定向到ASP.NET Core项目中,这时候我们无需设置应用程序池来托管我们的代码,它只负责转发请求而已。

安装IIS

检查是否安装IIS

在浏览器中输入:http://localhost 如果得到如下”Internet information Services”欢迎页面,则IIS已经安装且运行正常;如果得到“server not found”(找不到服务器)则IIS未安装或已经停止运行
image.png

安装IIS

控制面板-程序

image.png

启用或关闭Windows功能

image.png

选择Windows功能

展开“Internet Information Services”,然后在打开的列表中勾选你需要的功能,点击确定,接着windows会自动下载并安装您勾选的系统,耐心等待完成。当出现“Windows已完成请求的更改”的时候就说明完成了,点击立即重新启动按钮。电脑重启后,在IE浏览器地址栏中输入http://localhost,如果能正常打开就说明IIS安装成功了。
image.png

安装AspNetCoreModule

IIS ASP.NET Core 之间的对接由AspNetCoreModule提供
首先安装 .NET Core Windows Server Hosting,安装完成后,打开IIS管理器,双击模块,进入模块列表,看到AspNetCoreModuleV2模块,表示安装成功。
image.png

新建.Net Core Mvc 项目

image.png

右键发布项目

image.pngimage.png
image.png

添加网站

image.png

设置网站的“应用程序池”

在IIS左侧选择“应用程序池”,在右则可以看到我们网站使用的“Demo”,双击打开,设置.NET CLR 版本:无托管代码。
image.png
右键高级设置
image.png

访问网站

在浏览器输入 http://localhost:28301/
image.png