第67篇 .net core簡述

似梦亦非梦發表於2024-12-06

1.什麼是.net core

net core 是一個跨平臺的高效能開源框架用具生成基於雲連線的Internet的新的應用程式,可以建造web應用程式和服務,
lot應用和移動後端,可以在Windows,macOS,和Linux上進行開發和部署,
在asp.net4.x重新設計更改了體系結構形成了更精簡的模組化框架

1.1 .net core的特點

跨平臺,自託管,開源,高效能。

1.2 .netcore的優點:

  • 1)生成webui和webapi的統一場景,
  • 2)整合新式客戶端框架和開發工作流,
  • 3)基於環境的雲就緒配置系統,
  • 4)內建依賴注入,(可以使用第三方替換)
  • 5)輕型的高效能模組化的HTTP請求管道,
  • 6)能夠在IIS,nginx,Apache,docker上進行委託管或在自己的程序中進行託管,
  • 7)定目標到.net core ,時可以使用並行應用版本控制,
  • 8)簡化新式的web開發工具,
  • 9)開原始碼和以社群為中心,

且.net core 完全作為nuget包提供,藉助nuget包可以將應用最佳化減少到只包含到必須的依賴項,提升了安全性,減少了維護和提高效能。

2..net core框架效能測試

3..net core執行過程--基於Kestrel的控制檯程式

image

代理伺服器:
iis為我們做了兩件事
1.應用程式伺服器(nfx),解析動態程式,例如aspx
2.反向代理,將解析後的資源或靜態資源,代理出去
.net core使用iis做反向代理與用nginx有區別呢

4.中介軟體執行過程

4.1 http管道化,HttpContext上下文

中介軟體是組裝到應用程式管道中的軟體,用於處理請求和響應。
每個元件:
選擇是否將請求傳遞到管道中的下一個元件。
可以在管道中的下一個元件之前和之後執行工作。

4.2 中介軟體的三種寫法:

4.2.1 Run

//Run 方法沒的執行
			app.Run(async context =>
			{
				loger.LogInformation("run 1 start");
				await context.Response.WriteAsync("hello world!,run 1");
				loger.LogInformation("run 1 end");
			});

4.2.2 Use

//use 方法 執行了
			app.Use (async (context,next) =>
			{
				loger.LogInformation("Use 1 start");
				await context.Response.WriteAsync("hello world!,Use 1");
				loger.LogInformation("Use 1 end");
			});

例如:
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseAuthentication();
app.UseSession();
app.UseMvc();

4.2.3 Map & MapThen

4.3 中介軟體與模組處理程式的區別

HttpModule 和 HttpHandler:

ASP.NET其請求處理過程是基於管道模型的,這個管道模型由多個HttpModule和HttpHandler組成。

在整個生命週期中,它們大致的執行過程是這樣的:client端傳送頁面請求,被IIS的某個程序截獲,它根據申請的頁面字尾(.aspx)不同,呼叫不同的頁面處理程式(.asp->asp.dll;.aspx->ISAPI.dll),而頁面處理程式在處理過程中,則要經歷 HttpModule,HttpHandler的處理,前者HttpModule用於頁面處理前和處理後的一些事件的處理,後者HttpHandler進行真正的頁面處理。


中介軟體比HTTP模組和處理程式更簡單:
模組、處理器Global.asax。電腦科學,網路。配置(IIS配置除外)和應用程式生命週期都沒有了中介軟體已經接管了模組和處理程式的角色中介軟體是使用程式碼配置的,而不是在Web.config中配置的管道分支允許您將請求傳送到特定的中介軟體,不僅基於URL,還基於請求頭、查詢字串等。
中介軟體與模組非常相似:原則上為每個請求呼叫,能夠透過不將請求傳遞給下一個中介軟體而使請求短路,能夠建立自己的HTTP響應
中介軟體和模組的處理順序不同:
中介軟體的順序基於它們插入請求管道的順序,而模組的順序主要基於應用程式生命週期事件:
中介軟體對響應的順序與請求的順序相反,而模組對請求和響應的順序是相同的,參見使用IApplicationBuilder建立中介軟體管道

5.源於配置:Configure Services、ApplicationSettings

6. 構建WebHost - WebHostBuilder()

6.1 CreateDefaultBuilder(建立WebHost,預設配置)

建立HostBuilder物件
指定Host要使用的內容根目錄
配置初始化(環境變數、appsettings.json、User Secrets)
指定kestrel伺服器
日誌
在開發環境模式下啟用作用域驗證(UseDefaultServiceProvider)

6.2 UseContentRoot

指定web主機要使用的內容站點根目錄
這個設定決定了ASP.NET Core開始搜尋內容檔案,比如MVC檢視。
內容根也用作Web根設定的基本路徑。如果路徑不存在,則主機無法啟動。

.UseContentRoot("c:\\<content-root>")

6.3 UseConfiguration

使用web主機上給定的配置設定

6.4 UseKestrel

指定Kestrel作為web主機使用的伺服器

6.5 ConfigureAppConfiguration

ConfigureAppConfiguration
CreateDefaultBuilder >> WebHostBuilder >> IConfiguration 依賴注入
這個方法專門用來為 WebHostBuilder新增配置 IConfiguration,包括appsettings.json的、命令列引數以及環境變數
後載入覆蓋模式

6.6 ConfigureLogging

新增一個委託,用於配置提供Log(多次呼叫)

6.7 ConfigureServices

新增一個委託,用於為主機或web應用程式配置其他服務。(多次呼叫)

UseIIS / UseIISIntegration
IIS worker process 工作程序,
IISExpress 程序內 InProcess 效能好(不代表iis高於kestrel)
w3wp.exe或iisexpress.exe
配置伺服器在執行時應該監聽的埠和基本路徑
AspNetCoreModule後面。應用程式也將被配置為捕獲啟動錯誤

6.8 UseStartup()

Startup.cs這個類主要做兩件事情的配置Service DI和http管道,這些都是在WebHost啟動之前就需要確定下來的

6.9 Build() —— 構建

1、構建一個Microsoft.AspNetCore.Hosting。託管web應用程式的IWebHost。
2、Build()方法是Microsoft.Extensions.Hosting中,並且該方法只會執行一次,當然這種一次只是在同一個例項裡面.

6.10 Run() —— 啟動

執行web應用程式並阻塞呼叫執行緒,直到主機關閉。

6.11 InProcess && OutOfProcess

image

image
ASP.NET Core 程序內(InProcess)託管
程序內託管”可依託 IIS 獲得更高的吞吐量,

選擇程序內託管,意味著將 .NetCore 應用程式的工作程序託管到 IIS 的工作程序 w3wp.exe 中,使用的 IIS 程序內伺服器,即使用的是:IISHttpServer。

image

ASP.NET Core 程序外(out-of-process)託管
選擇程序外託管,實際上就是告訴 IIS ,當前應用程式不使用IISHttpServer,改為使用 Kestrel 伺服器

1、可以直接瀏覽器訪問 檢視 server
2、工作管理員 ,worker

7.net core開發者必學知識:

English、C#、Linq、MVC、Razor、REST、Route、DI/IoC、AOP、Filter&Attributes、Cache、ORM

相關文章