• .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
     
     
     
     
     
     
  • 相关阅读:
    注册“Oracle Provider for OLE DB”和创建链接服务器
    前端编辑神器Brackets
    vue+webpack项目实战
    MPreview.js
    webpack+gulp实现自动构建部署
    rem布局下使用背景图片和sprite图
    webpack配合vue.js实现完整的单页面demo
    淘宝弹性布局方案lib-flexible研究
    前端工程化
    mock server相关解决方案
  • 原文地址:https://www.cnblogs.com/wwkk/p/14152878.html
Copyright © 2020-2023  润新知