.net core系列(一)
用Vs 创建.NET Core web项目
首先介绍Main方法入口,0个引用说明是被框架调用
其中CreateHostBuilder方法如下:
其中 Startup类如下: Configure和ConfigureServices都是0个引用
以上标红的序号是他们的执行顺序。
CreateHostBuilder创建WebHost,默认配置 Host是一个静态类,里面有一个CreateDefaultBuilder方法,我们去看源码 这里实例化了一个WebHostBuilder类进去看看private readonly HostingEnvironment _hostingEnvironment;
private readonly List> _configureServicesDelegates;
private IConfiguration _config;
private WebHostOptions _options;
private WebHostBuilderContext _context;
private bool _webHostBuilt;
private List> _configureAppConfigurationBuilderDelegates;
public WebHostBuilder()//默认构造函数
{
_hostingEnvironment = new HostingEnvironment();
_configureServicesDelegates = new List>();
_configureAppConfigurationBuilderDelegates = new List>();
_config = new ConfigurationBuilder().AddEnvironmentVariables("ASPNETCORE_").Build();
if (string.IsNullOrEmpty(GetSetting(WebHostDefaults.EnvironmentKey)))
{
UseSetting(WebHostDefaults.EnvironmentKey, Environment.GetEnvironmentVariable("Hosting:Environment") ?? Environment.GetEnvironmentVariable("ASPNET_ENV"));
}
if (string.IsNullOrEmpty(GetSetting(WebHostDefaults.ServerUrlsKey)))
{
UseSetting(WebHostDefaults.ServerUrlsKey, Environment.GetEnvironmentVariable("ASPNETCORE_SERVER.URLS"));
}
_context = new WebHostBuilderContext
{
Configuration = _config
}//
通过构造函数依赖注入方式
WebHost前期需要准备默认配置,这些配置它需要用到一些参数和一些变量通过注入的方式。 它具体需要配置那些地方呢 1.UseContentRoot 指定了Web主机所使用的内容、站点根目录 因为前期就要将那些wwwroot静态文件,静态网页、配置文件读取到,所以先指定目录2.UseConfiguration
传的控制台命令args就在这里执行
3.UseKestrel
配置Kestrel服务器
4.ConfigureAppConfiguration
5.ConfigureLogging
配置日志
6.ConfigureServices
ConfigureServices是Startup方法里面的,会自动把我们的一些服务进行默认配置,我们提前写好的配置服务,在WebHostBuilder里面构建,进行服务注入。 最后返回一个WebHostBuilder,就完成构建了。 我们在默认配置的时候是默认不包含我们自己创建的Startup的服务,而是系统默认的服务。- Build()-构建
- Run()-构启动
因此显示以上信息
三、.Net Core进程内外托管 进程是指IIS Worker Process工作进程 启动IIS运行.net Core项目可以在任务管理器中看到,结束项目运行进程消失 进程内托管就是指的这个 进程外托管就是dotnet.exe,打开网页可以看到服务器双击项目
AspNetCoreHostingModel配置了托管模式。InProcess指定进程内,OutProcess指定进程外
1.当AspNetCoreHostingModel设置InProcess进程内托管,启动IIS,任务管理器这时候有IIS Worker Process,网页服务器显示IIS
2.当AspNetCoreHostingModel设置InProcess进程内托管,启动项目,任务管理器这时候没有IIS Worker Process,网页服务器显示IIS
3.当AspNetCoreHostingModel设置OutProcess进程外托管,启动IIS,任务管理器这时候还是有IIS Worker Process,网页服务器显示Kestrel
4.当AspNetCoreHostingModel设置OutProcess进程外托管,启动项目,任务管理器没有IIS Worker Process,网页服务器显示Kestrel
这是怎么回事,怎么进程内外都会启动IIS Worker Process,进程内外到底有什么区别
原因分析:蓝色字体第1、3点进程内外的IIS服务都会启动,不过启动的作用确实不一样的
1.进程内启动IIS是当作服务器
2.进程外也启动IIS,是Kestrel配合IIS,将IIS当作反向代理服务器使用,不是作为整个项目的应用服务器了
以前是请求通过IIS监听,通过IIS托管代码响应直接完成
ASP.NET Core不同的是 靠ASP.NET Core Module把HTTP请求转发
IIS这个时候等同于Nginx反向代理,本身不再处理了
ASP.NET Core内置Kestrel服务器等价于IIS--Webserver