1. 程式人生 > >C# Owin初探 概念理解(一)

C# Owin初探 概念理解(一)

原文: C# Owin初探 概念理解(一)

本文是閱讀網上大牛的文章總結而成。

目錄

1.Owin定義

2.為什麼要用Owin

3.作用

4.總結

 

 

1.Owin定義

Owin是Open Web Interface For .NET。也就是.Net開源的web介面,聽起來口氣有點大,值得我們下面深入瞭解。

 

2.為什麼要用Owin

百度百科的CV大法

過去,IIS作為.NET開發者來說是最常用的Web Server(沒有之一),源於微軟產品的緊耦合關係,我們不得不將Website、Web Application、Web API等部署在IIS上,事實上在2010年前並沒有什麼不妥,但隨著近些年來Web的發展,特別是移動網際網路飛速發展,IIS作為Web Server已經暴露出他的不足了。主要體現在兩個方面,ASP.NET (System.Web)緊耦合IIS,IIS緊耦合OS,這就意味著,我們的Web Framework必須部署在微軟的作業系統上,難以跨平臺

正是由於微軟產品系緊耦合的關係,才造成跨平臺上的不足,這也是被飽受詬病。所以我們需要OWIN來解耦,在面向物件的世界裡,介面往往是解耦的關鍵,如下圖所示:

使用OWIN,Web Framework不再依賴IIS和OS,這意味著你能使用任何你想的來替換IIS(比如:Katana或者Nowin),並且在必要時隨時升級,而不是更新作業系統。當然,如果你需要的話,你可以構建自定義的宿主和Pipeline去處理Http請求。

這一切的改變都是由於OWIN的出現,他提供了明晰的規範以便我們快速靈活的去擴充套件Pipeline來處理Http請求,甚至可以不寫任何一句程式碼來切換不同的Web Server,前提是這些Web Server遵循OWIN規範。

 

3.作用

Owin完全解耦了IIS,Owin可以在任何的伺服器上使用。為什麼呢?

它是web伺服器的一個標準介面,藉助這一介面使得web應用和伺服器解耦。Owin在.Net web伺服器和.Net web應用之間定義了一套標準的介面,其目的是為了實現伺服器與應用之間的解耦。基於此標準,鼓勵開發者開發簡單、靈活的模組,從而推進.NET Web Development開源生態系統的發展。

OWIN定義了4層:

Host:主要負責應用程式的配置和啟動程序,包括初始化OWIN Pipeline、執行Server。

Server:這是實際的Http Server,繫結套接字並監聽的HTTP請求然後將Request和Response的Body、Header封裝成符合OWIN規範的字典併發送到OWIN Middleware Pipeline中,最後Application為Response Data填充合適的欄位輸出。

Middleware:稱之為中介軟體、元件,位於Server與Application之間,用來處理髮送到Pipeline中的請求,這類元件可以是簡單的Logger或者是複雜的Web Framework比如Web API、SignalR,只要Sever連線成功,Middleware中介軟體可以是任何實現應用程式委託的元件。

Application:這是具體的應用程式程式碼,可能在Web Framework之上。對於Web API、SignalR這類Web Framework中介軟體而言,我們僅僅是改變了他們的託管方式,而不是取代ASP.NET WEB API、SignalR原先的應用程式開發。所以該怎麼開發就怎麼開發,只不過我們將他們註冊到OWIN Pipeline中去處理HTTP請求,成為OWIN管道的一部分,所以此處的Application即正在意義上的處理程式程式碼。

 

4.總結

OWIN的思想就是簡單、靈活——通過要求OWIN中介軟體只依賴AppFun型別,為開發基於OWIN的中介軟體提供了的最低門檻。同時,通過使用環境字典在各個中介軟體之間進行資訊的傳遞,而非傳統ASP.NET(System.Web)中使用HttpContext貫穿ASP.NET整個生命週期來傳遞。

上面介紹了owin的概念,我們開始真正的使用它一下,看到底是怎麼實現的:

C# Owin 建立與測試自己的中介軟體Middleware(二)

 

可以關注本人的公眾號,多年經驗的原創文章共享給大家。