当前位置: 移动技术网 > IT编程>开发语言>.net > ASP.NET Core部署系列一:发布到IIS上

ASP.NET Core部署系列一:发布到IIS上

2019年06月08日  | 移动技术网IT编程  | 我要评论

魏小迪,人物画像,直升机大战

前言

  当构建一个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的搭建已经完成,作为个人的笔记记录备忘,同时也共享出来,不知道你是否有所收获。接下来会遇到什么样坑。不管怎样,你的每一步,回过头来看,都是值得的

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网