<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      ASP.NET Web API: 宿主(Hosting)

      ASP.NET Web API 處理架構(gòu)中介紹了ASP.NET Web API主要有三層組成:宿主(hosting),消息處理管道(message handler pipeline)和控制器處理(controller handling),本篇文章主要介紹宿主(Hosting):包括ASP.NET經(jīng)典管道上的Web Hosting和WCF堆棧的自宿主SelfHosting。

      ASP.NET經(jīng)典管道上的Web Hosting

      1、ASP.NET 路由使您可以使用不必映射到網(wǎng)站中特定文件的 URL。 由于該 URL 不必映射到文件,因此可以使用對(duì)用戶操作進(jìn)行描述因而更易于被用戶理解的 URL,路由在ASP.NET Web API上一樣有重要的位置。在ASP.NET平臺(tái)上,是通過(guò)RouteTable的靜態(tài)屬性Routes添加路由到路由表里,例如下面的代碼是ASP.NET MVC項(xiàng)目模板默認(rèn)定義的路由:

      protected void Application_Start()
      {
          RegisterRoutes(RouteTable.Routes);
      }

      public static void RegisterRoutes(RouteCollection routes)
      {
          routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

          routes.MapRoute(
              "Default", // Route name
              "{controller}/{action}/{id}", // URL with parameters
              new { controller = "Home", action = "Index", id = UrlParameter.Optional }
          );
      }

      大部分的路由邏輯是由UrlRoutingModule附加到ASP.NET 的管道事件PostResolveRequestCache,對(duì)每一個(gè)Http請(qǐng)求,這個(gè)模塊在路由集合中匹配符合路由規(guī)則,如果有一個(gè)匹配,則:

      • 從Route Data中獲取到一個(gè)route handler
      • 從Route Handler中獲取到一個(gè)實(shí)現(xiàn)IHttpHandler接口的Http處理程序
      • 最后,當(dāng)前的請(qǐng)求上下文映射到上述Http處理程序

      因此,在ASP.NET 管道的最后將請(qǐng)求發(fā)送這個(gè)處理器。

      2、集成Web API,當(dāng)宿主與ASP.NET,Web API的配置定義在單件的HttpConfiguration對(duì)象里,通過(guò)靜態(tài)屬性GlobalConfiguration.Configuration訪問(wèn)。Web API還定義了幾個(gè)RouteCollection 擴(kuò)展方法,叫做 MapHttpRoute,用來(lái)定義Web APi的配置。請(qǐng)看下面的示例:

      HttpConfiguration config = GlobalConfiguration.Configuration;
      config.Routes.MapHttpRoute("default", "{controller}/{id}",  new {id = UrlParameter.Optional});
      // other configuration settings

      上述代碼主要完成2項(xiàng)功能:

      通過(guò)MapHttpRoute擴(kuò)展方法添加到路由集合的Route Handler是HttpControllerRouteHandler,匹配使用MapHttpRoute添加的請(qǐng)求,相關(guān)的Route Handler返回一個(gè)新的處理器類型 HttpControllerHandler,它實(shí)現(xiàn)了異步IAsyncHttpHandler  接口,這個(gè)處理器使用路由數(shù)據(jù)初始化,包含匹配的信息。

      當(dāng)調(diào)用HttpControllerHandlerBeginProcessRequest方法,執(zhí)行下面的動(dòng)作:

      HttpServer獲取請(qǐng)求之后,它就進(jìn)入了宿主處理新階段(Web API的新管道)。下面的圖總結(jié)了路由處理過(guò)程和分發(fā)到HttpServer實(shí)例(信息處理的管道)。

      aspnethosting

      基于WCF堆棧的自宿主SelfHosting

      上面我們介紹完了在ASP.NET上的Web宿主,接下來(lái)我們來(lái)介紹基于WCF堆棧的自宿主SelfHosting。我們先來(lái)看一段使用自宿主的代碼:

      var config = new HttpSelfHostConfiguration("http://localhost:8080");
      config.Routes.MapHttpRoute("default", "{controller}/{id}",
                                      new { id = RouteParameter.Optional });
      var server = new HttpSelfHostServer(config);
      server.OpenAsync().Wait();
      Console.WriteLine("Server is opened");

      HttpSelfHostServer 繼承與HttpServer,并使用HttpSelfHostConfiguration 作為配置類,類圖結(jié)構(gòu)如下:

      selfhosting

      HttpSelfHostServer 內(nèi)部使用的WCF堆棧從傳輸媒體獲取消息然后把他們推送到上層的消息處理管道。下面部分簡(jiǎn)要介紹WCF的高層架構(gòu),Web API自宿主的特征。

      WCF架構(gòu)

      WCF架構(gòu)主要?jiǎng)澐譃?層,Channel Stack和Service Model,具體看下圖:

      wcfarchitecture

      較低的通道堆棧層是由一堆通道和行為類似于經(jīng)典的網(wǎng)絡(luò)協(xié)議棧。通道分為兩類:傳輸渠道和協(xié)議的渠道。負(fù)責(zé)傳輸通道由接口與傳輸介質(zhì)(例如TCP,MSMQ,HTTP)(是的,我知道,HTTP不僅僅是一個(gè)傳輸協(xié)議),即由訊息的接收與傳遞。協(xié)議的信息渠道流量過(guò)程上下通過(guò)疊加。一個(gè)典型的使用案例的增加協(xié)議通道數(shù)字簽名在發(fā)送方和驗(yàn)證簽名的人在接收的一面。傳輸通道,使用編碼器轉(zhuǎn)換字節(jié)流和信息輸送介質(zhì)字節(jié)實(shí)例。

      上層的Service Model執(zhí)行消息和方法調(diào)用,所處理的人物如下:

      • 把收到的消息轉(zhuǎn)換成參數(shù)序列
      • 獲取到使用的服務(wù)實(shí)例
      • 選擇調(diào)用的方法
      • 選擇線程處理調(diào)用的方法

      然而HttpSelfHostServer不使用Service Model層,相反,他直接消費(fèi)了從傳輸通道堆棧獲取的消息。傳輸通道堆棧層使用Binding來(lái)組織,如下圖所示:

      wcfbindingelementschannels_thumb

      Binding是一個(gè)有序的Binding Element的集合,每一個(gè)元素描述一個(gè)通道或者編碼器。第一個(gè)Binding Element描述了上層通道,最后一個(gè)Binding Element描述了底層的通道,總之這是一個(gè)傳輸通道。

      HttpSelfHostServer 和HttpSelfHostConfiguration 類

      在內(nèi)部HttpSelfHostserver.OpenAsync 方法基于HttpSelfHostConfiguration實(shí)例屬性創(chuàng)建和配置創(chuàng)建一個(gè)HttpBinding實(shí)例。然后他利用這個(gè)Binding異步創(chuàng)建一個(gè)WCF傳輸堆棧,他也創(chuàng)建一個(gè)Pump把消息推入這個(gè)堆棧,并轉(zhuǎn)換為HttpRequestMessage 實(shí)例并把新的請(qǐng)求推入HttpServer,下圖是消息的處理流程:

      selfhostingdiagram

      使用自宿主的時(shí)候,大多數(shù)的WCF HTTP binding 約束和設(shè)置都是可用的,在配置的內(nèi)部創(chuàng)建的HttpBinding實(shí)例可以用2種方式創(chuàng)建。第一種是使用HttpSelfHostConfiguration屬性,例如MaxBufferSizeTransferMode,這些被用于內(nèi)部創(chuàng)建HttpBinding實(shí)例,第二種方法是創(chuàng)建一個(gè)HttpSelfHostConfiguration的子類,然后重寫OnConfigureBinding方法,這個(gè)方法中有機(jī)會(huì)在創(chuàng)建通道堆棧之前修改綁定配置。

      selfhostingdetail

      ASP.NET WebAPI Hosting Techniques http://www.codeproject.com/Articles/555923/ASP-NET-WebAPI-Hosting-Techniques

      posted @ 2012-03-19 22:45  張善友  閱讀(15755)  評(píng)論(6)    收藏  舉報(bào)
      主站蜘蛛池模板: 免费观看欧美猛交视频黑人| 被喂春药蹂躏的欲仙欲死视频| 麻豆妓女爽爽一区二区三 | 久久久精品94久久精品| 麻豆国产va免费精品高清在线| 天堂网亚洲综合在线| 女人香蕉久久毛毛片精品| 天堂V亚洲国产V第一次| 国产一区二区三区在线观看免费| 综合欧美视频一区二区三区| 成人精品视频一区二区三区尤物| 亚洲国产精品久久久天堂麻豆宅男| 国产熟女一区二区三区四区| 伊在人间香蕉最新视频| 亚洲精品国产精品乱码不卡| 精品视频在线观看免费观看| 富裕县| 欧美人与动牲交A免费观看| 狠狠噜天天噜日日噜视频麻豆| 蜜臀av久久国产午夜| 国产亚洲久久久久久久| 日本一本正道综合久久dvd| 成人自拍小视频免费观看| 午夜免费无码福利视频麻豆| 精品不卡一区二区三区| 国产高清无遮挡内容丰富| 丰满熟女人妻一区二区三| 精品国产一区二区亚洲人| 亚洲一区二区三区自拍公司| 天天澡日日澡狠狠欧美老妇| 日本高清不卡一区二区三| 亚洲人成色77777在线观看 | 亚洲狠狠爱一区二区三区| 欧美三级在线播放| 97久久久精品综合88久久| 午夜成人精品福利网站在线观看| 中文字幕精品无码一区二区| 婷婷四房播播| 亚洲熟妇自偷自拍另类| 黄色特级片一区二区三区| 人人澡人人妻人人爽人人蜜桃 |