ASP.NET Core部署系列一:发布到IIS上
前言:
当构建一个asp.net core应用程序并且计划将其运行在iis中时,你会发现core应用程序和之前版本的asp.net程序在iis中的运行方式是完全不一样的。与asp.net时代不同,asp.net core不再是由iis工作进程(w3wp.exe)托管,而是使用自托管web服务器(kestrel)运行,iis则是作为反向代理的角色转发请求到kestrel不同端口的asp.net core程序中,随后就将接收到的请求推送至中间件管道中去,处理完你的请求和相关业务逻辑之后再将http响应数据重新回写到iis中,最终转达到不同的客户端(浏览器,app,客户端等)。而配置文件和过程都会由些许调整,中间最重要的角色便是aspnetcoremodule,它是其中一个的iis模块,请求进入到iis之后便立即由它转发,并迅速重定向到asp.net core项目中,所以这时候我们无需设置应用程序池来托管我们的代码,它只负责转发请求而已。
回顾之前的asp.net的经典托管
在经典asp.net应用程序中,所有一切都托管在iis工作进程中(w3wp.exe),这也被称为iis应用程序池。asp.net程序被托管在应用程序池中,并且被按照iis内建的asp.net托管特性所实例化。当请求从http.sys传入到asp.net应用程序管道时,本地运行时管理器会实例化一个代表应用程序的.net运行时,同时引入httpruntime对象用来处理这个请求。来自http.sys的请求被派送到对应的应用程序池和httpruntime实例的托管站点。
asp.net core与iis
asp.net core则完全不同,它并不是运行在iis的工作进程中,而是独立运行的。它运行于控制台应用程序之中,控制台中则运行了kestrel web服务器组件。kestrel作为一款.net web服务器的实现,它在吞吐量性能方面做了很多工作。它可以快速将来自网络的请求接入到应用程序中,但是它仅仅是一个最基本的web服务器。它没有类似iis的web管理服务,也没有iis那么多的功能。
asp.net core程序独立运行在控制台应用程序中,并通过dotnet运行时命令调用。它并没有被加载到iis工作进程中,但是iis却加载了名为aspnetcoremodule的本地module,这个module用于执行外部的控制台程序。aspnetcoremodule是作为asp.net core server hosting bundle的一部分被安装在服务器上的。
部署之前要确保你的iis上已经安装了aspnetcoremodule托管模块,如果没有的话,点击这里进行下载并安装
开始:
一、安装iis
在控制面板→程序→启用或关闭windows功能→勾选internet information services以及web管理工具下的iis管理控制台
二、发布项目
发布我们建好的asp.net core项目,然后选择iis,新建一项发布配置
三、在iis上绑定添加网站
添加一个网站,设置一下名称,并将路径指向你刚才发布的文件夹,然后启动网站即可
设置应用程序池的.net clr版本为“无托管代码”,因为刚才也说了,iis是作为一个反向代理的角色,并不需要它来托管代码
四、浏览网站
这个时候出现了这个问题
错误分析:
iis服务器上的.net
core 运行时不是最新的,导致aspnetcoremodulev2模块缺失或者报错
检查发现 项目的版本是 .netcore2.2 ,而运行时安装的为 .netcore runtime 2.1.6
查看程序 如果没有安装.netcore2.2 就需要安装
下载完成后安装
就可以打开网站了
总结:
至此,整个iis的搭建已经完成,作为个人的笔记记录备忘,同时也共享出来,不知道你是否有所收获。接下来会遇到什么样坑。不管怎样,你的每一步,回过头来看,都是值得的
推荐阅读
-
NET Framework项目移植到NET Core上遇到的一系列坑(2)
-
ASP.NET Core Web 应用程序开发期间部署到IIS自定义主机域名并附加到进程调试
-
将ASP.NET网站部署到服务器IIS上
-
把ASP.NET MVC项目部署到本地IIS上的完整步骤
-
ASP.NET Core部署系列二:发布到CentOS上
-
如何把ASP.NET MVC项目部署到本地IIS上
-
ASP.Net Core 2.2 MVC入门到基本使用系列 (一)
-
ASP.NET CORE MVC 2.0 发布到IIS 配置问题
-
asp.net发布到IIS中出现错误:处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipe
-
如何在ASP.NET Core应用程序运行Vue并且部署在IIS上详解