从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 ...
随机推荐
- 【Zookeeper】源码分析之请求处理链(二)
一.前言 前面学习了请求处理链的RequestProcessor父类,接着学习PrepRequestProcessor,其通常是请求处理链的第一个处理器. 二.ZooKeeper源码分析 2.1 类的 ...
- Javascript 闭包与高阶函数 ( 一 )
上个月,淡丶无欲 让我写一期关于 闭包 的随笔,其实惭愧,我对闭包也是略知一二 ,不能给出一个很好的解释,担心自己讲不出个所以然来. 所以带着学习的目的来写一写,如有错误,忘不吝赐教 . 为什么要有闭 ...
- 事件详解<一>
一 扭转对事件的认知 事件,是js和html交互的桥梁.当用户操作页面上的元素,比如点击,鼠标移入移出,然后做一些事情. 你若触发,我便执行--事件发生,调用它的处理函数执行相应的JavaScript ...
- C语言对齐
"%-md":左对齐,若m比实际少时,按实际输出.(m为整数) "%md":右对齐,若m比实际少时,按实际输出. 我自己编了一个,给你看看实际效果: #incl ...
- Linux安装 Mysql
背景 前不久开始学习部署ambari,在安装mysql的时候遇到了点问题,现在从网上找了点部署流程记录下来便于以后安装mysql. Centos 7.2 安装 Mysql 5.7.13 首先要安装yu ...
- 【转】Hibernate和IBatis对比
原文地址:http://blog.csdn.net/ya2dan/article/details/7396598 项目也做过几个, 使用IBatis就做一个项目, 基本上都是使用Hibernate, ...
- MongoDB的安装及恢复
在http://www.mongodb.org/display/DOCS/Downloads 下载对应版本 mongodb 安装数据库 解压文档,复制到c盘,改名为mongodb 新建文件夹c:/da ...
- 使用PHP生成二维码(PHPQRCode)
关于什么是二维码,可以阅读 http://baike.baidu.com/view/132241.htm 这里就不多讲了,二维码的应用非常广泛,似乎一夜之间渗透到我们生活的方方面面,地铁广告.报纸.火 ...
- 使用GDI绘制文本
/// <summary> /// 定义一个绘制文本 /// </summary> public void Texts() ...
- Eclipse-ee 启动Tomcat后浏览器无法访问Tomat,并且Web项目服务部署
环境: Ubuntu 14.04 + Eclipse-ee + Tomcat7 问题: 在Eclipse中建立Server时选择的Tomcat7,Server的运行时选择的时自己安装的Tomcat目 ...