細說Asp.Net Web API訊息處理管道(二)

來源:互聯網
上載者:User

標籤:color   ons   分享   執行   template   逆序   images   gdi   地址   

      在細說Asp.Net Web API訊息處理管道這篇文章中,通過翻看源碼和執行個體驗證的方式,我們知道了Asp.Net Web API訊息處理管道的組成類型以及Asp.Net Web API是如何建立訊息處理管道的。本文在上篇的基礎上進行一個補充,談談在WebHost寄宿方式和SelfHost寄宿方式下,請求是如何進入到Asp.Net Web API的訊息處理管道的。

WebHost寄宿方式:

      在剖析Asp.Net WebAPI路由系統一文中,我們知道Asp.Net Web API在WebHost寄宿方式下,最終把HttpControllerHandler類型作為請求的HttpHandler。而又由於Asp.Net Web API以WebHost方式寄宿時,是利用Asp.Net環境裡進行請求的處理的。請求在Asp.Net管道事件流轉過程中,代表HttpHandler的HttpControllerHandler類型中的ProcessRequestAsync方法將被執行,此方法正是Asp.Net Web API訊息處理管道的入口,翻看源碼我們就可以驗證:

 

 

       可以看到,在WebHost寄宿方式下,進入Asp.Net Web API訊息處理管道的入口是HttpControllerHandler中的ProcessRequestAsync方法,預設使用HttpServer和HttpRoutingDispatcher分作作為訊息處理管道的“龍頭”和“龍尾”。請求在經過Asp.Net Web API訊息處理管道各個節點的處理後,將響應訊息逆序流轉回HttpControllerHandler中,最後通過Asp.Net將響應訊息返回給用戶端。

      分析完WebHost寄宿方式下如何進入Asp.Net Web API訊息處理管道後,下面繼續看看SelfHost寄宿方式下是怎樣的。

SelfHost寄宿方式:

      在繼續之前,我們先看Asp.Net Web API以SelfHost方式寄宿的一個例子。建立一個控制台項目,添加名為DemoController的類:

    public class DemoController : ApiController    {        public string Get()        {            return "Asp.Net WebAPI SelfHost";        }    }
    class Program    {        static void Main(string[] args)        {                        HttpSelfHostConfiguration configuration = new HttpSelfHostConfiguration("http://localhost:9999/");            using (HttpSelfHostServer server = new HttpSelfHostServer(configuration))            {                server.Configuration.Routes.MapHttpRoute(name: "DefaultApi", routeTemplate: "api/{controller}");                                server.OpenAsync();                Console.Read();            }        }    }

瀏覽器查看:

      現在我們就以這個Demo來開始剖析Asp.Net Web API在SelfHost寄宿方式下,是如何進入訊息處理管道的。首先來看看HttpSelfHostConfiguration類型,如下,HttpSelfHostConfiguration繼承至HttpConfiguration。在上面執行個體中,我們通過它來傳入了一個地址,此地址將會被用來監聽請求:

      接下來看一下HttpSelfHostServer源碼,如下。HttpSelfHostServer繼承至HttpServer,由此看來,HttpSelfHostServer將是Asp.Net Web API訊息處理管道的“龍頭”:

      Asp.Net Web API訊息處理管道的“龍尾”,HttpRoutingDispatcher成為SelfHost寄宿方式下訊息處理管道的“龍尾”:

      根據上面的範例程式碼,當完成監聽連接埠的置頂、路由的註冊後,調用HttpSelfHostServer的OpenAsync方法開始接收請求。那麼,在OpenAsync方法內做了什麼呢?下面我們來詳細看看:

 

 

      由上面分剖析過程可以知道,在SelfHost寄宿方式下,Asp.Net Web API通過HttpBinding進行請求的監聽和響應的回複。繼承至HttpServer的HttpSelfHostServer直接作為訊息處理管道的“龍頭”。在HttpBinding的協助下,完成請求的監聽、請求進入訊息處理管道進行處理、響應訊息的回複等操作。

      至此,Asp.Net Web API在WebHost和SelfHost兩種寄宿方式下,請求如何進入訊息處理管道的剖析完成。能力有限,如果不對之處,歡迎提出指正。

細說Asp.Net Web API訊息處理管道(二)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.