Owin介紹
什麼是OWIN?
OWIN的英文全稱是Open Web Interface for .NET。
如果僅從名稱上解析,可以得出這樣的資訊:OWIN是針對.NET平臺的開放Web介面。
那Web介面是誰和誰之間的介面呢?是Web應用程式與Web伺服器之間的介面,OWIN就是.NET Web應用程式與Web伺服器之間的介面。
為什麼需要這樣一個介面呢?因為.NET Web應用程式是運行於Web伺服器之中的,.NET Web應用程式需要通過Web伺服器接收使用者的請求,並且通過Web伺服器將響應內容傳送使用者。如果沒有這樣一個介面,.NET Web應用程式就要依賴於所執行的具體Web伺服器,比如ASP.NET應用程式要依賴於IIS。有了這個介面,ASP.NET應用程式只需依賴這個抽象介面,不用關心所執行的Web伺服器。
所以,OWIN的作用就是通過引入一組抽象介面,解耦了.NET Web應用程式與Web伺服器,再次體現了介面的重要性。在軟體開發中,每次解耦都是一次很大的進步。
【進一步的理解】
OWIN是對ASP.NET Runtime的抽象。
ASP.NET 5.0是OWIN的一種實現
通過下面幾張圖可以更直觀地理解:

image.png

image.png

image.png

image.png
我對Owin理解
OWIN是一個規範和標準,旨在闡述web伺服器和web應用應該如何去解耦,它使得原本不太可能遷移到其他環境的ASP.NET應用變得可能。
在OWIN之前,當我們在寫ASP.NET應用的時候,我們的思想裡是預設將我們的應用繫結到IIS上的,因為我們要依賴System.Web這個程式集。
System.Web這個程式集似乎在ASP的年代就存在著了,它包含的東西未必每個你都需要,但是每個預設每個請求都會使用這個資源,所以就可能造成一些浪費。
要明白的是OWIN本身是一個規範,它沒有什麼dll啊exe之類的,我理解它就是一份文件而已。
基於Owin的延伸
Katana源於微軟,是微軟為了實現OWIN的規範而作的產品,它就是實實在在的程式集了,我們可以使用它了。現在的Katanna實現了:
Web API
目前ASP.NET MVC和Web Forms還是隻能在System.Web中執行,不過長期來看,這部分很會被解耦,被分離出來。ASP.NET在IIS裡的效能開銷多半也是由於System.Web這個解不開根源,不過現在,我們有兩個方式去搭建執行環境:
IIS
自宿主(Self-Host)
如果你想效能好點,你可以採取自宿主的方式;如果你想用到IIS那些為你做好的功能,那就用IIS吧。