ASP.NET Core管道由注冊(cè)的服務(wù)器和一系列中間件構(gòu)成。我們?cè)?a >上一篇中深入剖析了中間件,現(xiàn)在我們來(lái)了解一下服務(wù)器。服務(wù)器是ASP .NET Core管道的第一個(gè)節(jié)點(diǎn),它負(fù)責(zé)完整請(qǐng)求的監(jiān)聽(tīng)和接收,最終對(duì)請(qǐng)求的響應(yīng)同樣也由它完成。[本文已經(jīng)同步到《ASP.NET Core框架揭秘》之中]

服務(wù)器是我們對(duì)所有實(shí)現(xiàn)了IServer接口的所有類(lèi)型以及對(duì)應(yīng)對(duì)象的統(tǒng)稱(chēng)。如下面的代碼片段所示,這個(gè)接口具有一個(gè)只讀屬性Features返回描述自身特性集合的FeatureCollection對(duì)象,另一個(gè)Start方法用于啟動(dòng)服務(wù)器。

 1: public interface IServer : IDisposable
 2: {
 3: IFeatureCollection Features { get; }
 4: void Start<TContext>(IHttpApplication<TContext> application);    
 5: }

當(dāng)我們Start方法啟動(dòng)指定的Server的時(shí)候,必須指定一個(gè)類(lèi)型為IHttpApplication<TContext>的參數(shù),我們將實(shí)現(xiàn)才接口的所有類(lèi)型及其對(duì)應(yīng)對(duì)象統(tǒng)稱(chēng)為HttpApplication。當(dāng)服務(wù)器在接收到抵達(dá)的請(qǐng)求之后,它會(huì)直接交給這個(gè)HttpApplication對(duì)象來(lái)處理,所以我們需要先來(lái)認(rèn)識(shí)一下這個(gè)對(duì)象。

一、HttpApplication

對(duì)于ASP.NET Core管道來(lái)說(shuō),HttpApplication對(duì)會(huì)接管服務(wù)器接收的請(qǐng)求,后續(xù)的請(qǐng)求完全由它來(lái)負(fù)責(zé)。如下圖所示,HttpApplication從服務(wù)器獲得請(qǐng)求之后,會(huì)利用注冊(cè)的中間件注冊(cè)對(duì)請(qǐng)求進(jìn)行處理,并最終將請(qǐng)求遞交給應(yīng)用程序。HttpApplication針對(duì)請(qǐng)求的處理實(shí)際上會(huì)在一個(gè)執(zhí)行上下文中完成,這個(gè)上下文為應(yīng)用對(duì)單一請(qǐng)求的整個(gè)處理過(guò)程定義了一個(gè)邊界。單純描述HTTP請(qǐng)求的HttpContext是這個(gè)執(zhí)行上下文中最為核心的部分,除此之外,我們還可以根據(jù)需要將其他相關(guān)的信息定義其中,所以IHttpApplication<TContext>接口采用泛型參數(shù)的形式來(lái)表示定義這個(gè)上下文的類(lèi)型。

網(wǎng)友評(píng)論