简单聊聊AspNetCore的启动流程

首先,得和大家达成一个共识,即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监听程序。

如果能帮到你一点点,就给个赞吧。哈哈。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/307177.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

共聚焦图片怎么加标尺_聚焦扶贫政策,打造小康生活

导语:农村独栋小楼、整洁的水泥路……扶贫产业蓬勃发展,我省结合实际,狠抓特色产业,助力脱贫攻坚,实现乡村振兴。武宁县:“四个聚焦”巩固脱贫成果2020年是全面建成小康社会目标实现之年,是全面…

后端学习 - 并发编程

文章目录零 基本概念1 CAS、ABA 问题和原子变量2 this 引用逸出3 不变性 immutable4 同步、异步、阻塞、非阻塞5 JMM6 同步方案演示:计数器 demo*一 进程与线程1 区别与联系2 Java内存区域3 线程组4 线程的上下文切换5 并发与并行6 线程的生命周期与状态二 线程间的…

打造跨平台.NET Core后台服务

续之前讲的在TopShelf上部署ASP.NET Core程序,作为后台服务运行,自从.NET Core 3.0出现以后,出现了自带的Generic Host,使得自托管服务变为可能。这种方式和TopShelf方式一样,可以直接F5进行服务的调试,也为…

iphone桌面横屏设置在哪里_我和我各司其职的桌面们

作者:旭彦兮沐桌面是只属于我们自己一个人的舞台,是与我们独处的好伙伴。好好布置一下自己的桌面,能在很大程度上保持我们心情的愉悦和做事情的效率,让我们保持专注当下的沉浸感。我最早了解到「桌面文化」其实是很早之前了&#…

后端学习 - RabbitMQ

文章目录一 MQ 的作用与基本概念1 流量削峰2 应用解耦3 异步调用4 四个基本概念二 核心模式1 工作队列模式(Work Queue)2 发布/订阅模式(Publish / Subscribe)3 路由模式(Routing)4 主题模式(To…

dubbo k8s 服务发现_工商银行基于 Dubbo 构建金融微服务架构的实践-服务发现篇

简介: Dubbo 作为分布式微服务框架,众多公司在实践中基于 Dubbo 进行分布式系统架构。重启开源后,我们不仅看到 Dubbo 3.0 最新的 Roadmap 发布,而且还看到阿里在自身电商开始推进 Dubbo 和内部 HSF 的融合,并在 双11 …

初识ABP vNext(12):模块的独立运行与托管

点击上方蓝字"小黑在哪里"关注我吧模块运行动态 C# API 客户端前言很久没更新这个系列。。。之前的章节中讲到ABP的模块是可以独立运行的,但是没有介绍具体怎么操作,本篇就来讨论一下模块如何独立运行,以及一些托管方式。本人也是处…

后端学习 - Spring5

文章目录一 简介二 IOC1 底层原理2 实现过程3 Spring 实现 IOC 的两个接口二 Bean1 普通 Bean 与 FactoryBean2 Bean 单例与否的设置3 Bean 的生命周期三 IOC 的 Bean 管理(XML)1 创建对象2 属性注入 - 使用 set 方法3 属性注入 - 通过有参构造器实现3 注…

ios realm 文件_iOS开发中使用Realm数据库

// 查RLMResults * dogs [LSDog allObjects];NSLog("%", dogs);RLMResults * pers [LSPerson allObjects]; // 查询所有的数据NSLog("所有的数据:%", pers);RLMResults * perArr [LSPerson objectsWhere:"name 1"]; // 查询某一…

吐槽一下Abp的用户和租户管理模块

1. 背景ASP.NET Core 基于声明的访问控制到底是什么鬼?聊到基于声明的身份认证将 身份和签发机构分离,应用程序信任签发机构,故认可签发的身份信息。-----------ClaimB站:438962688 Name:饭思思_weibo:538210234 Name:饭思思van姓名:不详 籍贯…

后端学习 - JDBC

文章目录一 JDBC概述1 Java中的数据存储技术2 什么是JDBC3 JDBC程序的编写步骤二 Java连接数据库的方式三 使用 PreparedStatement 实现 CRUD 操作1 数据库的调用的三个接口2 增Create/删Delete/改Update 操作3 查Retrieval操作4 批量插入操作四 数据库事务1 事务2 事务的 ACID…

.NET架构小技巧(3)——反射,架构人员法宝I

如题,这是我的心声,反射在我的开发中用的频次还是比较高的,有一本万利的感觉,一段复杂的代码,可以节省大量的时间;但带来的一个问题性能相对较差,所以要选择适合的场景使用。关于C#中的反射基本…

米家扫地机器人充满电需要多长时间_米家扫地机器人充满电后能工作多久?

硬件及结构相关1、Q:米家扫地机器人的激光对小孩或宠物有伤害吗?A:米家扫地机器人通过了IEC 60825-1:2014激光安全等级Class 1的认证,不会对儿童或者宠物带来伤害请放心使用。2硬件及结构相关1、Q:米家扫地机器人的激光…

后端学习 - JavaWeb

技术体系 文章目录一 HTML1 网页的组成部分2 HTML 概述3 HTML 标签4 常用标签5 表单与表单的提交二 CSS1 语法格式2 使用方法三 JavaScript1 概述2 与 HTML 结合的两种方式3 变量类型及特殊值4 关系、逻辑运算5 数组6 函数7 事件8 DOM (Document Object Model&#…

python中的while语句怎么居中_python基础之while语句操作

# i 0# while (i < 9):# print("i ----> ",i)# i i 1# print(i,"i即将大于或者等于9,while不在执行")#执行1-100的数字# a1 1# while a1 < 100:# print(a1,end" ")# a1 a1 1#执行100 -1 的数字# a1 100# while a1 > 0:# prin…

心想技术驱动业务,却在背道而驰

这里是Z哥的个人公众号每周五11&#xff1a;45 按时送达当然了&#xff0c;也会时不时加个餐&#xff5e;我的第「165」篇原创敬上大家好&#xff0c;我是Z哥。相信每一位真正的程序员心里都有这样一个念想&#xff1a;只要我的技术够牛&#xff0c;就能驱动业务的发展。但是往…

后端学习 - SpringMVC

文章目录一 SpringMVC 简介1 MVC2 SpringMVC3 创建第一个 SpringMVC 项目二 RequestMapping1 注解类与方法的区别2 value 属性3 method 属性4 params 属性5 headers 属性6 SpringMVC 支持路径中的占位符三 获取 Request 的一系列参数1 通过控制器方法的形参2 控制器方法形参 映…

hbase shell远程连接_hbase与phoenix集成

Phoenix是构建在HBase之上的关系型数据库层&#xff0c;作为内嵌的客户端JDBC驱动用以对HBase中的数据进行低延迟访问Phoenix会将用户编写的sql查询编译为一系列的scan操作&#xff0c;最终产生通用的JDBC结果集返回给客户端Phoenix可以看成是mysql准备安装包apache-phoenix-4.…

对精致码农大佬的 [理解 volatile 关键字] 文章结论的思考和寻找真相

一&#xff1a;背景1. 讲故事昨天在园里的编辑头条看到 精致码农大佬 写的一篇题为&#xff1a;[C#.NET 拾遗补漏]10&#xff1a;理解 volatile 关键字 (https://www.cnblogs.com/willick/p/13889006.html) 的文章&#xff0c;大概就是说在 多线程环境下&#xff0c;一个在debu…

后端学习 - SpringBoot

SpringBoot 是整合 Spring 技术栈的一站式框架&#xff0c;是简化 Spring 技术栈的快速开发脚手架约定大于配置 文章目录一 概述1 第一个 SpringBoot 项目2 SpringBoot 特性&#xff1a;依赖管理3 SpringBoot 特性&#xff1a;自动配置二 SpringBoot 的 IOC容器1 组件添加&…