.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<Action<WebHostBuilderContext, IServiceCollection>> _configureServicesDelegates;
       private IConfiguration _config;
       private WebHostOptions _options;
       private WebHostBuilderContext _context;
       private bool _webHostBuilt;
       private List<Action<WebHostBuilderContext, IConfigurationBuilder>> _configureAppConfigurationBuilderDelegates;
       public WebHostBuilder()//默认构造函数
       {
           _hostingEnvironment = new HostingEnvironment();
           _configureServicesDelegates = new List<Action<WebHostBuilderContext, IServiceCollection>>();
           _configureAppConfigurationBuilderDelegates = new List<Action<WebHostBuilderContext, IConfigurationBuilder>>();
           _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静态文件,静态网页、配置文件读取到,所以先指定目录
View Code

2.UseConfiguration

传的控制台命令args就在这里执行

View Code

3.UseKestrel

配置Kestrel服务器

View Code

4.ConfigureAppConfiguration

View Code

5.ConfigureLogging

配置日志

View Code

6.ConfigureServices

View Code
ConfigureServices是Startup方法里面的,会自动把我们的一些服务进行默认配置,我们提前写好的配置服务,在WebHostBuilder里面构建,进行服务注入。
最后返回一个WebHostBuilder,就完成构建了。
我们在默认配置的时候是默认不包含我们自己创建的Startup的服务,而是系统默认的服务。
View Code
  1. Build()-构建
构建一个Microsoft.AspNetCore.Hosting,托管Web应用程序的WebHost,一个方法只会执行一次
  1. Run()-构启动
发现run方法下面是一个异步方法
View Code

因此显示以上信息

三、.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

 运行可以使用命令方式
C:UsersceshiDesktopDesiginDemoCoreWebDemoinDebug etcoreapp3.1>dotnet CoreWebDemo.dll --urls="http://*:8792" --ip="127.0.0.1" --port=8792
 
 
 
 
 
 
原文地址:https://www.cnblogs.com/wwkk/p/14152878.html