细说ASP.NET Core与OWIN的关系
前言
最近這段時間除了工作,所有的時間都是在移植我以前實現(xiàn)的一個Owin框架,相當(dāng)移植到到Core的話肯定會有很多坑,這個大家都懂,以后幾篇文章可能會圍繞這個說下,暫時就叫《Dotnet Core踩坑記》吧,呵呵。
接下來我對我在移植過程中發(fā)現(xiàn)的一些問題進行了總結(jié),今天主要說說Owin。說到Owin就不能不提Katana項目和宇內(nèi)大神的Tinyfox了,當(dāng)然關(guān)于這兩塊內(nèi)容這篇文章就不多涉及了,博友可以自己在博客園內(nèi)搜索關(guān)于Owin的文章還是挺多的。
Owin
ASP.NET vNext剛推出的時候,號稱是Owin的一個實現(xiàn),在?http://owin.org?上,直到現(xiàn)在還保留著這樣一段描述。
Implementations
Katana
Freya
ASP.NET vNext
很多開發(fā)者紛紛實現(xiàn)著自己的Owin框架,也寫很多應(yīng)用到了實際的生產(chǎn)環(huán)境中,當(dāng)然我也是其中一員。
ASP.NET Core
移植過程中,會發(fā)現(xiàn)有很多的不同,還有遇到新的API不知道怎么使用,這時候看文檔還不如直接看源碼來的痛快。
在看完AspCore.Mvc后才發(fā)現(xiàn),一點關(guān)于Owin的內(nèi)容都沒有;但很明顯官方文檔上說是支持Owin協(xié)議的,后來我硬著頭皮去看了看KestrelHttpServer和HttpAbstractions兩個項目,后來才發(fā)現(xiàn)原來真的沒有一點點的Owin協(xié)議內(nèi)容啊(一定要給MS差評)。
好吧,只能看看MS是怎么支持Owin的,在HttpAbstractions項目里發(fā)現(xiàn)了Microsoft.AspNetCore.Owin這樣一個子項目,看完只是想說:“你這意思這叫向下兼容?” ,算了。 現(xiàn)在只要在Asp.net core項目里加入依賴Microsoft.AspNet.Owin就可以IApplicationBuilder接口的擴展方法UseOwin進行Owin中間件的調(diào)用。如下:
添加依賴:
"dependencies": { ? ?"Microsoft.AspNet.Server.Kestrel": "1.0.0-*", ? ?"Microsoft.AspNet.Owin": "1.0.0-*" ?},在Startup中加入UseOwin:?
public void Configure(IApplicationBuilder app){
? ? ?app.UseOwin(pipeline =>
? ? ?{ ? ? ? ? pipeline(next => OwinHello);
? ? ?});
}
當(dāng)然OwinHello的內(nèi)容一定是一個標(biāo)準(zhǔn)Owin中間件的內(nèi)容了:
Kestrel
既然新的服務(wù)器已經(jīng)不在支持Owin協(xié)議了,那個是怎么通信的?
這個問題在ASP.NET Core管道深度剖析系列文章中被提到過一些,其實每一個HttpContext在被創(chuàng)建出來都會依賴一個IFeatureCollection集合。
IFeatureCollection這個接口用于描述某個對象所具有的一組特征,由一組Feature接口組成。
列出其中一個IHttpConnectionFeature接口,用于獲得Http的連接信息:
閱讀kestrel源碼,發(fā)現(xiàn)每一次接受tcp連接,都會將Http流,封裝在一個幀F(xiàn)rame,它被描述成一個單向或雙向的request和response。 并組裝成特征集合供上層應(yīng)用進行使用。
最后
最后就發(fā)一段Owin字典對應(yīng)Feature的源碼吧:
只能說還好,性能并沒有太多的損耗,粘的不全,全的自己看吧 : )?
當(dāng)然MS這樣做也是有用意義的,他們不太喜歡字典的方式,于是用Feature這種方式將這些內(nèi)容,"強類型化了"。這對于底層的Server來說,很快能基于這組特征二次開發(fā)出一套中間件來支持ASP.NET Core,當(dāng)然直接在Server內(nèi)實現(xiàn)這樣性能也會更高。
只能說API變化有點快吧,但是對于開源,看幾天源碼就全明白了,這對于我們dotnet開發(fā)者來說,真是大大的好事兒。
原文地址:http://www.cnblogs.com/maxzhang1985/p/5553335.html
.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關(guān)注
總結(jié)
以上是生活随笔為你收集整理的细说ASP.NET Core与OWIN的关系的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Consul入门
- 下一篇: 3到6年的.NETer应该掌握哪些知识