.Net Core初識以及啓動配置

更新計劃

這段時間,會陸續把去年一年在公司作的相關培訓,整理成博客分享給你們,在團隊內部已經把大部分的.net項目容器化並部署到k8s,中間也踩了不少坑,也會把相關問題整理處理,你們一塊兒學習交流,哈。html

.net程序員爲何要學習.net core

  • .Net Core 是.Net的將來,微軟在19年 5月已經明確說明,將來只有.Net 5(=.NET Core vNext),.Net 5是.net core的下一個版本,你能夠用它來開發Windows,Linux,MacOs,IOS,Android等等應用。
    avatarlinux

    圖片來源git

  • 在容器、k8s、Devops、微服務等技術的推進下,2020年雲原生將勢不可擋,.net Cor而設計之初就了適配雲原生,它有不少優勢,都說明它是雲原生時代,是一個很好的選擇。
  • 它體積更小,啓動速度更快、佔用資源更少、支持水平擴展
  • 考慮本身的職業發展,.net core也是必須須要熟悉的程序員

什麼是.Net Core

  • 開源通用的開發框架 github地址,微軟和社區共同維護
  • .net core 模塊化管理,按需引用對應組件
  • 支持跨平臺、跨架構開發,部署靈活
  • 兼容性強
  • 支持命令行
  • 包含了.Net Framework的類庫 (3.0版本以前不少都是從.Net Framework類庫移植的,如今已經再也不移植老的代碼 )

.Net Core和.Net Framework的區別

推薦一篇講的很好的文章,這裏就不展開了傳送門github

  • 同父異母的兄弟關係
  • .Net core能夠認爲是.net Framework的下一代產品,到2020後都統一爲.Net 5
    .Net Schedule

.Net Core 3.1

  • .net core 3.1 2019年12月正式發佈 LTS 能夠商用
  • 兼容winform和WPF,這部分目前不跨平臺、
  • 體積更小,啓動速度更快,佔用資源更少,支持水平擴展,更好適配雲原生和微服務
  • Blazor
  • GRPC

ASP.NET Core Web應用啓動

ASP.NET Core Web應用啓動過程

啓動過程

經過上圖大概能夠把啓動過程總結爲:web

建立主機生成器-配置主機->建立主機->運行主機json

ASP.NET Core Web應用

applicarion

主機(Host)

主機主要負責應用程序的啓動和生命週期的管理,配置服務器和請求處理管道,實質是一個封裝了應用資源的object
配置日誌、依賴服務的注入c#

.Net core 中的主機分爲泛型主機web主機服務器

Kestrel 介紹

Kestrel 是 ASP.NET Core 項目模板指定的默認 Web 服務器。是一個跨平臺的高性能的WEB服務器,角色定位相似於IIS,但不是IIS,它在linux下性能更強,相比於IIS它功能相對較少,不支持反向代理。
Kestrel架構

啓動配置

這裏說的配置,主要分爲兩種:

  • 主機配置
  • 服務配置。

下面咱們以實際代碼來看下,怎麼新增和修改默認的啓動配置

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

這個是咱們經過vs生成的一個最簡單的.net core 3.1空的模板項目。Host.CreateDefaultBuilder()這個方法默認會加載命令行參數, 加載配置 應用配置(appsettings.json)``加載環境變量,加載日誌組件等默認配置。

看到這些你們可能會疑問,若是環境配型、應用配置、命令行中有相同的配置,應用會以那個配置的優先級生效呢,下面咱們以最簡單啓動urls參數爲例,驗證下,這些配置的優先級。

urls 配置

.net core 中提供了三種設置urls的方法

  • 環境變量, 在 launchSettings.jsonenvironmentVariables增長ASPNETCORE_URLS來設置urls
{
  "profiles": {
    "CoreStudyLesson1": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development",
        "ASPNETCORE_URLS": "http://*:7000"
      },
      "applicationUrl": "http://localhost:5000"
    }
  }
}

運行效果
dotnet_run_3

  • 應用配置。修改appsettings.json,增長urls節點
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
  "urls":"http://*:8000"
}

運行效果
dotnet_run_4

  • 命令行啓動, 使用 --urls 參數指定url
dotnet run --urls https://*:9000

運行效果
dotnet_run_2

  • 代碼指定
public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
                // 設置監聽Url 命令行  硬編碼 應用配置 環境變量  
                webBuilder.UseUrls("http://*:6001");
            });
}

運行效果
dotnet_run_5

具體優先級是

命令行 >應用配置>硬編碼>環境變量

組件配置-Kestrel配置

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            // 配置web主機 kestrel
            .ConfigureWebHostDefaults(webBuilder =>
            {
                //組件配置
                webBuilder.ConfigureKestrel((context,options)=>
                    options.Limits.MaxConcurrentConnections=10);//默認沒有限制
                // 主機配置項
                webBuilder.UseStartup<Startup>();
            });
}

組件配置log配置

移除默認的日誌組件,並添加制定的logProvider.

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            // 配置web主機 kestrel
            .ConfigureWebHostDefaults(webBuilder =>
            {
                //組件配置
                webBuilder.ConfigureKestrel((context,options)=>
                    options.Limits.MaxConcurrentConnections=10);//默認沒有限制
                
                webBuilder.ConfigureLogging(logging =>
                    {
                        logging.ClearProviders();// 移除.net Core默認注入的日誌Providers
                        logging.AddLog4Net();//全部日誌統一使用log4net
                    });
                
                // 主機配置項
                webBuilder.UseStartup<Startup>();
            });
}

主機配置-啓動配置

// 主機配置項
 webBuilder.UseStartup<Startup>();
相關文章
相關標籤/搜索