目錄
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整個生命周期來傳遞。