本文记录下在Asp.net Core在署时候可能会遇到的一些疑问。
本文针对有.net framework web程序部署经验并刚刚接触到asp.net core的小伙伴,且暂时不介绍Lunix上部署 — 作为一名有过.net framework部署经验的人员,我们知道,当在vs发布项目到文件夹后,会生成项目的dll,如果有依赖的第三方的dll会一并发布到对应的文件夹下。之后我们在iis中新建网站指定文件夹为我们发布的文件夹即可。网站的运行方式为托管的方式,即:我们的网站不能独立运行,程序的入口为iis的w3wp.exe;我们发布的dll为这个程序的扩展或者说外挂,当iis接收到浏览器请求时候,会交给我们生成的dll处理,处理好的结果再返回给iis,而iis返回给客户浏览器。
那么在asp.net core中有哪些不同了呢?首先我们知道.net core是跨平台的,iis是只能运行在windows,那么我们就会有一个疑问 .net core 是如何解决这个问题的?.net core 生成的dll我们是否可以在iis以原有的方式进行托管?下面我们就开始学习下
我们使用vs2017新建一个asp.net core的web应用程序,并且配置如下图:
图片1
图片2
通过以上两个步骤,我们已经建立好一个可以发布的web应用(这个模版是一个包含权限配置功能和页面的,并且可以直接运行,有一些示范的页)。 我们右击项目,选择“发布”:选择发布目标为:“文件夹”,点击右边的“高级”。会看到如下界面: 图片3
图片4
下面我们介绍下上图中的“部署模式”,这个里面有两个选项:1.框架依赖,2 独立。当我们选择框架依赖时,发布后的目标文件夹中的文件会非常少,只有项目文件和应用到的三方dll,这个时候我们部署需要在服务器上安装.net。当我们选择“独立”那么目标文件夹下面会包含所有的程序依赖,这个时候不需要在服务器安装.netcore。
接下来我们再来看看“目标运行时”这个选项是干什么的,该配置项底下有五个配置个:可移植,win-x86 win-x64 osc-64 lunix-64。
1.可移植:只会生成相关的dll、资源文件、配置文件。 2.win-x86和win-x6:会多出来一个exe。该exe运行后会启动web服务。此时我们可以通过浏览器访问web应用。 3.osc-x64:和win一样,生成对应的Mac可执行文件。 4.lunix-x64:和win一样,生成对应的Lunix可执行文件。
到此,我们已经了解了发布相关的一些知识。
— 那么如何部署到服务器上呢?文章开始处的疑问的答案是什么?
其实.net core 自己带了一个名为:Kestrel的web服务。这个程序是集成到.netcore中的且是跨平台的。我们可以在发布文件夹下面用命令运行时当前的web程序可由浏览器访问。如下:
图片4 有没有方式来使用iis来运行我们的web吗? 当然可以,这里需要安装webhosting来使我们的web应用与iis联系在一起,这个联系有两种机制,一种是直接使用iis运行,也就是我们说的Inprocess;另一种是iis作为转发服务器,转发http请求给我们的web服务,也就是OutOfProcess。