亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

深入理解 OWIN 中的 Host 和 Server

2019-11-17 01:58:32
字體:
來源:轉載
供稿:網友

深入理解 OWIN 中的 Host 和 Server

The Open Web Interface for .NET (OWIN),注意單詞為大寫,之前好像都寫成了 Owin,但用于項目的時候,可以寫成:Microsoft.Owin.*。

OWIN 體系結構圖(簡化版):

asp.net 5 中 Server 和 Host 相關程序包(New/Old):

  • Microsoft.AspNet.Hosting:Microsoft.Owin.Hosting
  • Microsoft.AspNet.Server.IIS:Microsoft.Owin.Host.SystemWeb
  • Microsoft.AspNet.Server.WebListener:Microsoft.Owin.Host.HttpListener
  • Microsoft.AspNet.StaticFiles:Microsoft.Owin.StaticFiles
  • Microsoft.AspNet.Security:Microsoft.Owin.Security
  • Microsoft.AspNet.Diagnostics:Microsoft.Owin.Diagnostics
  • ...

另外,在 ASP.NET 5 中,還有一個 K 命令,對應原 OWIN 中的 OwinHost.exe。

在 OWIN 的體系結構中,結合 ASP.NET 5 相關程序包,Host 和 Server 的概念,Microsoft.AspNet.Hosting、Microsoft.AspNet.Server.IIS、Microsoft.AspNet.Server.WebListener 等程序包,然后還有 Web Server(IIS、Apache 等),其實它們之間的關系很容易搞混,尤其是在理解 ASP.NET 5 的運行機制或在其項目發布的時候,如果不能很好的理解它們之間的相互關系,將是一個很大的隱患,下面我們根據 Host 和 Server 來分別理解他們。

Host

Host(主機):運行應用程序的進程,可以是從 IIS 或獨立可執行文件到自己的自定義程序的任何內容。主機負責啟動、加載其他 OWIN 組件和正常關閉,主機一般可以看作是服務器的操作系統提供的進程。

從概念上理解,Host 其實就是一個進程,用于管理 OWIN 組件的一些操作,對于現在的 ASP.NET 5 應用程序部署來說,Host 一般有兩個選擇:Self-Host 和 IIS。

先來看一下采用 Self-Host 的一段 PRoject.json 配置:

{    "webroot": "wwwroot",    "dependencies": {        "Microsoft.AspNet.Hosting": "1.0.0-beta1",        "Microsoft.AspNet.Server.WebListener": "1.0.0-beta1"    },    "commands": {        /* Change the port number when you are self hosting this application */        "web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5000"    }}

這是 ASP.NET 5 項目中采用 Self-Host 方式最簡單的一個配置,因為有了 K Commands(OwinHost.exe),所以我們不需要在 Startup Configure 進行如下配置:

var baseAddress = new Uri("http://localhost:5000");var config = new HttpSelfHostConfiguration(baseAddress);

OwinHost.exe 命令說明:

咋一看,和 K Commands 非常類似,其實就是從 OwinHost 演化而來的,在上面 project.json 配置中,我們只加載了兩個程序包,其中 Microsoft.AspNet.Server.WebListener 是 OWIN 中 Server 的概念,是創建 ASP.NET 5 項目的默認服務器,這個后面再說,那 Microsoft.AspNet.Hosting 是什么?官方說明為:The Hosting repo contains code required to host an ASP.NET vNext application, it is the entry point used when self-hosting an application. 什么意思呢?我們看一下 Microsoft.AspNet.Hosting/Program.cs 的源碼,就知道了:

using System;using System.IO;using System.Threading;using System.Threading.Tasks;using Microsoft.Framework.ConfigurationModel;using Microsoft.Framework.DependencyInjection;using Microsoft.Framework.DependencyInjection.Fallback;using Microsoft.Framework.Logging;using Microsoft.Framework.Runtime;namespace Microsoft.AspNet.Hosting{    public class Program    {        private const string HostingIniFile = "Microsoft.AspNet.Hosting.ini";        private readonly IServiceProvider _serviceProvider;        public Program(IServiceProvider serviceProvider)        {            _serviceProvider = serviceProvider;        }        public void Main(string[] args)        {            var config = new Configuration();            if (File.Exists(HostingIniFile))            {                config.AddIniFile(HostingIniFile);            }            config.AddEnvironmentVariables();            config.AddCommandLine(args);            var services = HostingServices.Create(_serviceProvider, config)                .BuildServiceProvider();            var appEnv = services.GetRequiredService<IApplicationEnvironment>();            var hostingEnv = services.GetRequiredService<IHostingEnvironment>();            var context = new HostingContext()            {                Services = services,                Configuration = config,                ServerName = config.Get("server"), // TODO: Key names                ApplicationName = config.Get("app")  // TODO: Key names                    ?? appEnv.ApplicationName,                EnvironmentName = hostingEnv.EnvironmentName,            };            var engine = services.GetRequiredService<IHostingEngine>();            var loggerFactory = services.GetRequiredService<ILoggerFactory>();            var appShutdownService = _serviceProvider.GetRequiredService<IApplicationShutdown>();            var shutdownHandle = new ManualResetEvent(false);            var serverShutdown = engine.Start(context);            appShutdownService.ShutdownRequested.Register(() =>            {                try                {                    serverShutdown.Dispose();                }                catch (Exception ex)                {                    var logger = loggerFactory.Create<Program>();                    logger.WriteError("TODO: Dispose threw an exception", ex);                }                shutdownHandle.Set();            });            var ignored = Task.Run(() =>            {                Console.WriteLine("Started");                Console.ReadLine();                appShutdownService.RequestShutdown();            });            shutdownHandle.WaitOne();        }    }}

這段代碼就很好的說明了“entry point”的概念,當我們使用 Self-Host 方式,Microsoft.AspNet.Hosting 就是與我們應用程序的一個入口,用來管理 OWIN 所有組件與應用程序的交互,啟動方式使用 K Commands,Host 除了采用 Self-Host 的方式,我們還可以使用 IIS,那他們之間有什么不懂呢?看段配置代碼就明白了:

{    "webroot": "wwwroot",    "dependencies": {        "Microsoft.AspNet.Server.IIS": "1.0.0-beta1"    }}

對,你沒看錯,如果采用 IIS 部署的方式,這就是 project.json 的配置代碼,只需要加載一個 Microsoft.AspNet.Server.IIS 程序包就可以了,那這個東西具體有什么作用呢?我們來看一段說明:Using the standard HttpModule and HttpHandler types, OWIN pipelines can run on IIS as a part of an ASP.NET request flow. 我們再來看一下它和 Microsoft.AspNet.Server.WebListener 的不同之處:

一圖勝千言,Microsoft.AspNet.Server.IIS 依賴項中的 Microsoft.AspNet.Loader.IIS 是什么東西?其實就是 /wwwroot/bin 目錄下的 AspNet.Loader.dll,這個東西在之前的博文中有提到,你可以把它看成是打開 IIS 與 OWIN 管道的一個“開關”,讓應用程序的請求放在 IIS 模塊進行處理,比如 OWIN 中的某一個 Microsoft.AspNet.StaticFiles Middleware 中間件,對應于 IIS 中的 StaticFilesModule 模塊,在應用程序中,關于靜態文件的一些請求處理,就是 StaticFilesModule 進行處理的,這是 IIS 的工作范疇。

Server

Server: While the host is responsible for starting and maintaining process within which the application runs, the responsibility of the server is to open a network socket, listen for requests, and send them through the pipeline of OWIN components specified by the user (as you may have already noticed, this pipeline is specified in the application developer’s Startup class).

Host 是管理 OWIN 組件的一個進程,而 Server 則是監聽請求,并分發請求給對應的 Middleware 中間件進行處理(Startup 中指定),也就是說 Server 只負責監聽與分發,不負責處理,這個就和 IIS 有很明顯的區別,IIS 是“全套服務”,請求的處理也在 IIS 中進行完成的,而 Microsoft.AspNet.Server.WebListener 只是完成簡單的監聽與分發(也可以稱為綁定 OWIN 組件)。

目前 OWIN 實現的兩個 Server:

  • Microsoft.AspNet.Server.WebListener
  • Microsoft.AspNet.Server.IIS

說深入理解,其實也只是表面而已,就記錄到這。

其他相關資料:

  • 快刀斬亂麻之 Katana
  • An Overview of Project Katana
  • Getting Started with OWIN and Katana
  • Understanding OWIN and Katana
  • ASP.NET 5中的那些K
  • K, KVM, KPM, KLR, KRE in ASP.NET 5 (vNext)
  • .NET應用服務器
  • OWIN 中 K Commands(OwinHost.exe)與 Microsoft.AspNet.Hosting 的角色問題

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产欧美久久一区二区| 亚洲精品成a人在线观看| 一本色道久久88综合亚洲精品ⅰ| 国内精品在线一区| 6080yy精品一区二区三区| 欧美制服第一页| 中文字幕欧美日韩| 欧美专区日韩视频| 亚洲天堂第二页| 亚洲一区www| 国产精品96久久久久久| 最近中文字幕日韩精品| 久久久久久亚洲精品| 亚洲夜晚福利在线观看| 亚洲欧美综合图区| 97精品国产91久久久久久| 欧美午夜精品久久久久久人妖| 久久成人精品视频| 国产精品视频26uuu| 欧美日韩国产成人在线观看| 欧美精品在线极品| 国产亚洲美女久久| 搡老女人一区二区三区视频tv| 国产精品露脸av在线| 九九热视频这里只有精品| 亚洲国产私拍精品国模在线观看| 国产91精品在线播放| 欧美国产第一页| 91精品国产91久久久久久吃药| 欧美午夜电影在线| 亚洲加勒比久久88色综合| 97久久精品国产| 国产欧美精品一区二区三区介绍| 欧美日韩久久久久| 欧美日韩一区二区三区在线免费观看| 欧美一级视频一区二区| 精品久久久久久久久国产字幕| 亚洲午夜精品久久久久久久久久久久| 91亚洲精品视频| 一本大道香蕉久在线播放29| 一区二区成人精品| 成人免费福利视频| 欧洲成人免费视频| 亚洲精品视频久久| 午夜免费在线观看精品视频| 精品久久久免费| 国产69久久精品成人看| 亚洲性日韩精品一区二区| 久久久精品中文字幕| 国产不卡在线观看| 欧美夫妻性生活视频| 日韩在线www| 日本欧美一二三区| 久久高清视频免费| 国产亚洲视频在线| 日韩免费观看av| 1769国产精品| 成人激情黄色网| 国产成人精品日本亚洲| 欧美日韩国产精品一区| 日本久久亚洲电影| 欧美激情在线狂野欧美精品| 国产视频精品自拍| 欧美性视频精品| 亚洲天堂av在线免费| 色狠狠久久aa北条麻妃| 91av在线视频观看| 国产美女扒开尿口久久久| 欧美激情久久久久| 美日韩精品视频免费看| 91久久久久久| 91av在线国产| 久久av资源网站| 亚洲丁香婷深爱综合| 亚洲自拍偷拍视频| 在线观看精品自拍私拍| 欧美一区深夜视频| 欧美性xxxx极品hd满灌| 亚洲精品欧美一区二区三区| 精品久久久国产| 欧美激情免费在线| 成人看片人aa| 国产精品久久久久久五月尺| 国产精品久久久久久av下载红粉| 一区二区亚洲欧洲国产日韩| 精品综合久久久久久97| 国产97人人超碰caoprom| 亚洲一区二区三区乱码aⅴ| 日韩影视在线观看| www高清在线视频日韩欧美| 国产成人精品一区| 亚洲高清不卡av| 在线精品视频视频中文字幕| 一本大道亚洲视频| 精品欧美国产一区二区三区| 国产成人高清激情视频在线观看| 色偷偷综合社区| 97超碰国产精品女人人人爽| 国产精品成人一区| 欧美日韩国产中字| 国产精品亚洲视频在线观看| 欧美老少做受xxxx高潮| 欧美亚洲国产另类| 国产精品视频久久| 国产精品久久久久999| 久久综合网hezyo| 国产精品免费久久久久影院| 91精品国产综合久久香蕉| 欧美一二三视频| 亚洲第一色中文字幕| 国产精品视频一区国模私拍| 精品国产福利视频| 久久人体大胆视频| 久久人人97超碰精品888| 久久影视电视剧凤归四时歌| 色爱av美腿丝袜综合粉嫩av| 欧美美女18p| 久久久久久久久久久av| 日本不卡高字幕在线2019| 欧美成人午夜影院| 欧美国产在线视频| 4k岛国日韩精品**专区| 久久久国产一区二区三区| 国产精品美女无圣光视频| 91国语精品自产拍在线观看性色| 欧美亚洲视频在线观看| 日韩av手机在线看| 久久久av一区| 最近中文字幕mv在线一区二区三区四区| 久久久噜噜噜久久久| 在线精品国产成人综合| 欧美成人午夜激情视频| 欧美亚洲一级片| 亚洲欧洲在线观看| 久久久久久久97| 日韩精品福利网站| 亚洲天堂网站在线观看视频| 亚洲精品电影网站| 亚洲一区二区三区乱码aⅴ| 欧美黄色性视频| 在线观看视频99| 欧美日韩一区二区在线播放| 日韩欧美在线免费观看| 亚洲男人av电影| 欧美日韩精品在线视频| 尤物精品国产第一福利三区| 日韩欧美成人免费视频| 国产精品高潮呻吟久久av野狼| 国产精品第100页| yw.139尤物在线精品视频| 亚洲激情久久久| 亚洲国产精彩中文乱码av在线播放| 97精品国产91久久久久久| 亚洲精品日韩久久久| 91久久久久久| 日韩视频免费大全中文字幕| 亚洲欧美国产日韩天堂区| 91精品国产色综合久久不卡98口| 成人免费网视频| 中日韩午夜理伦电影免费| 成人天堂噜噜噜| 亚洲国产日韩欧美综合久久| 亚洲精品成人久久| 尤物tv国产一区|