首先,得和大家达成一个共识,即AspNetCore项目其实就是一个控制台项目。可以简单的理解,AspNetCore就是将一个Web服务器宿主在一个进程(即控制台)中,然后它在这个进程中进行http请求的监听处理。
AspNetCore中默认使用kestrel作为web服务器,其将接收到的http请求封装成HttpContext对象,然后这个对象经由各个中间件处理,最终返回处理结果。如下所示:
有了kestrel,我们就可以摆脱IIS的捆绑,从而实现跨平台部署。一般在生产环境,我们会在站点前面部署代理服务器,比如nginx或IIS等。如下所示:
言归正传,我们还是来探索一下AspNetCore是如何启动和配置服务器。我们新建一个空的webapi项目,找到程序的入口,我们发现这里有一行代码,如下图所示:
这里代码表示要创建一个WebHost主机,我们先看第一个方法CreateWebHostBuilder中的代码。如下:
WebHost主机其实就是我们配置服务器的地方,你一定很奇怪,我们建一个空的项目,什么也没配置,站点是如何起来的呢?其实在CreateDefaultBuilder方法中会为我们配置一些默认参数。我们进去看一下。如下:
这里面的代码就很直观了,程序会为我们默认很多配置,比如目录、配置文件、日志这些。我们重点要关注UseKestrel这个方法,它就是帮我们配置一个kestrel服务器,配置了它,我们就可以在宿主进程中启动web服务了。我们再来看一下Run()方法。如下图所示:
再进入host.RunAsync方法,这个里面就是真正启动主机并监听端口了。里面使用CancellationToken来控制程序关闭。代码如下:
上面这段代码中应该有很多熟悉的控制台输出,如下图所示:
好了,今天就简单地带大家回顾下AspNetCore项目的启动流程,大家有兴趣的可以去看下源码。其实整体流程非常简单,就是宿主进程中放一个http监听程序。
如果能帮到你一点点,就给个赞吧。哈哈。