从Hosting开始
一.介绍:
Hosting作为用户编程入口,往下管理HttpServer,往上构建并调用Http请求中间件的管线(RequestDelegate 在HttpAbstractions模块细说),承上启下。
1.设置运行环境(HostingEnvironment)
2.配置Startup类(非必须),以此配置依赖注入容器和Http请求中间件
3.启动HttpServer,激活Http请求流程
二.细说:
下面是基本的启动代码,我们慢慢来分析。
var config = new ConfigurationBuilder().AddCommandLine(args).Build();
var host = new WebHostBuilder()
.UseConfiguration(config)
.UseStartup<StartupBlockingOnStart>()
.Build();
using (host)
{
host.Start();
Console.ReadLine();
}
WebHostBuilder收集各种信息,最终是为了Builder一个WebHost,最后通过WebHost的Start方法(对Run方法的封装)来启动Http监听并处理Http请求。那WebHostBuilder到底要手机哪些信息呢?
1.通过IConfiguration对象收集各种配置信息,默认取环境变量的配置:
_config = new ConfigurationBuilder()
.AddEnvironmentVariables(prefix: "ASPNETCORE_")
.Build();
UseSetting方法和UseConfiguration方法是对该配置对象的补充,因此上面的第一行代码赋予程序从命令行(dotnet run --xxx)获取配置信息的能力,这样便可以根据启动信息确定运行环境(Development/Staging/Production).
2.通过ConfigureServices方法收集要配置到依赖注入容器中的service(可选,因为Startup提供了该功能)。
3.通过ConfigureLogging方法配置日志工厂(可选,可以在Startup的构造函数或Configure方法中配置)。
4.以上便是WebHostBuilder主要收集的信息,那为什么我们还看到了很多其他的扩展方法呢?其实其他的扩展方法都只是在调用UseSetting方法将各自要配置的对象添加到IConfigution中去,以便在Build的时候可以获取。
接下来便是WebHostBuilder要执行Build方法了,这里面主要做如下几件事:
1.通过上面配置的IConfigution对象new一个WebHostOptions对象,再由此对象初始化HostingEnvironment对象,至此程序运行的环境信息已经确定。
2.添加一个基础对象到以来注入容器,如:IHostingEnvironment/LoggerFactory/Startup等等,这也是为什么我们可以在Startup类的构造函数和Cinfogure方法注入到一些基本的Service的原因。
3.new一个WebHost对象并执行Initialize方法。由此转到WebHost类。
WebHost主要是通过Startup构建RequestDelegate并启动HttpServer。具体待下一篇细说吧...
第一次写博客,书面表达能力欠佳,无法真正抒发所思所想,还望大家指正。
asp.net core的各框架源码中的问题都欢迎来QQ群(294525042)讨论,本人对源码研究颇深,愿与大家分享!
从Hosting开始的更多相关文章
- 通过重建Hosting系统理解HTTP请求在ASP.NET Core管道中的处理流程[下]:管道是如何构建起来的?
在<中篇>中,我们对管道的构成以及它对请求的处理流程进行了详细介绍,接下来我们需要了解的是这样一个管道是如何被构建起来的.总的来说,管道由一个服务器和一个HttpApplication构成 ...
- 用"hosting.json"配置ASP.NET Core站点的Hosting环境
通常我们在 Prgram.cs 中使用硬编码的方式配置 ASP.NET Core 站点的 Hosting 环境,最常用的就是 .UseUrls() . public class Program { p ...
- OWIN 中 K Commands(OwinHost.exe)与 Microsoft.AspNet.Hosting 的角色问题
问题详情:K Commands(OwinHost.exe)是不是 OWIN 中的 Host 角色?如果是,那 Microsoft.AspNet.Hosting 对应的是 OWIN 中的哪个角色? OW ...
- Nancy之基于Nancy.Hosting.Aspnet的小Demo
近来学习了一下Nancy这个框架,感觉挺好用的,就写篇简单的文章记录一下大致用法,由于是刚接触,写的代码 可能不规范,也没有具体的分层..莫吐槽... Nancy的官网:http://nancyfx. ...
- Nancy之基于Nancy.Hosting.Self的小Demo
继昨天的Nancy之基于Nancy.Hosting.Aspnet的小Demo后, 今天来做个基于Nancy.Hosting.Self的小Demo. 关于Self Hosting Nancy,官方文档的 ...
- Nancy之基于Self Hosting的补充小Demo
前面把Hosting Nancy with ASP.NET.Self Hosting Nancy和Hosting Nancy with OWIN 以demo的形式简单描述了一下. 这篇是为Self H ...
- Could not load file or assembly 'System.ServiceModel.DomainServices.Hosting'.系统找不到指定文件
项目部署到服务器后出现如下错误信息: Parser Error Message: Could not load file or assembly 'System.ServiceModel.Domain ...
- Hosting socket.io WebSocket apps in IIS using iisnode
In this post I explain how to configure a socket.io node.js application to use of WebSockets when ho ...
- Microsoft.Owin.Hosting 实现启动webapp.dll
Microsoft.Owin.Hosting 下面是 asp.net core 实现 using System;using System.Collections.Generic;using Syste ...
- Hosting static website on AWS
http://docs.aws.amazon.com/AmazonS3/latest/dev/website-hosting-custom-domain-walkthrough.html#root-d ...
随机推荐
- TypeScript-01-变量、基本类型和运算符
基本类型 基本类型有boolean.number.string.array.void.所有类型在TypeScript中,都是一个唯一的顶层的Any Type 类型的自类型.any关键字代表这种类型. ...
- [MongoDB] - Shell基本命令
在这里,我简单的记录一下MongoDB在shell客户端中使用的基本命令,比如创建/显示数据库,创建集合,删除集合等. 一.启动MongoDB并连接shell客户端 使用mongod.exe和mong ...
- 2017年2月22日-----------乱码新手自学.net 之Entity Framework 增删改
由于我是自学的,没有人教,在网上查资料也查不到个所以然.问大神们也是爱理不理的. 所以这篇随笔纯粹源自于我自己的认识.是否真正正确我也没有把握. 如果有什么错误,请大神们给予指正 ========== ...
- HNOI2015 Day 2题解
昨天做了HNOI day 2,感觉好像还是可做的,想当年什么splay还是高级算法,现在点剖什么就老考了简直丧病,虽然第二题还没写那就先当下嘴巴选手吧= = T1:[HNOI2015]落忆枫音 描述: ...
- 用canvas的arc绘制时钟
在页面上加入canvas标签: <body> <canvas id="c1" width="600px" height="600px ...
- Algorithms(4th)谢路云译大纲总结(附实现源码)
前言: 此算法书可以说是Java程序开发者的福音.里面涉及近50种计算机领域的经典算法,几位作者花了近40年的时间才完成这本著作.秉着对作者的敬仰与对算法的兴趣,我多次翻阅此书,而且常常被书中的经典算 ...
- JQUERY写大图轮播;附jquery的hover()方法、animate()方法、find()方法
思想:黑框设置超出部分隐藏. 红框往左移动,通过判断红框左边框距离黑框左边框的像素值,来实现红框的移动. 绿框在最上层,放每张图片的说明和序号. 一:html部分(大框.图片部分.箭头部分.图片介绍部 ...
- rhel 6.7 离线安装docker
本机系统信息 [test@rhel67temp ~]$ uname -a Linux rhel67temp 2.6.32-573.el6.x86_64 #1 SMP Wed Jul 1 18:23:3 ...
- Yii里model验证的小技巧
例如:需要判断,字符长度在12-20之间,最大长度的提示语用tooLong,最小提示语言用tooShort array('pay_order', 'length', 'max' => 20, ' ...
- KoaHub.JS用于Node.js的可移植Unix shell命令程序代码
shelljs Portable Unix shell commands for Node.js ShellJS - Unix shell commands for Node.js Shell ...