OWIN的理解和实践(二) – Host和Server的开发

时间:2021-09-22 07:04:59

原文:OWIN的理解和实践(二) – Host和Server的开发

对付开发人员来说,代码就是最好的文档,如上一篇博文所说,下面我们就会基于Kanata项目的一些具体挪用代码,来进一步深入理解OWIN的实现和感化.

今天我们先针对Host和Server来实现一个简单的应用.

我们的开发环境是:  VS2013 Update 3,  .Net Framework 4.5.1

Host开发

如上篇博文提及,Host具有如下特点:

实现一个宿主进程

卖力Server的启动和*

卖力Middleware和Application的装载

最简单的宿主进程就是Console Application,那么我们从成立Console措施开始

OWIN的理解和实践(二) – Host和Server的开发

注意这个措施和它的入口类(一般是Program.cs)就是我们所说的Host宿主进程的实现.

而具体的Host和Server的实现我们就需要借助Kanata项目的实现了.

首先通过Nuget获取Kanata的Host实现. 包名为: Microsoft.Owin.Hosting

OWIN的理解和实践(二) – Host和Server的开发

注: 目前版本为3.0.1, Owin的2个核心组件:  Owin和Microsoft.Owin会被同时载入.

WebApp.Start

Host的主要用途是启动和*Server, 这个成果的实现类就是在Microsoft.Owin.Hosting下的WebApp类, 请看类布局:

OWIN的理解和实践(二) – Host和Server的开发

我们可以看到,WebApp只有若干个Start函数,帮助于StartOptions类,依靠这2个类,就能完成Host对Server的启动和*.

Start函数有好几个重载,我们来看一个最为范例的实现. (其他实现大同小异,如果要使用请参阅相关文档)

public static System.IDisposable Start(Microsoft.Owin.Hosting.StartOptions options, System.Action<IAppBuilder> startup)

Options参数界说了Server启动所需的参数.

Startup参数是一个以Owin.IAppbuilder接口为参数的函数,通过这个函数,完成对Server所需Middleware的加载事情,这也是Host的关键感化之一!

函数返回一个实现IDisposable接口的类, 可以预见的是,当这个类Dispose的时候,被这个函数启动的Server也会同时*和消亡.

StartOptions

我们先来看下这个StartOptions中2个对照关键的属性:

public System.Collections.Generic.IList<string> Urls { get; }

Urls参数是以http标准url为格局字符串来界说Server监听的HostName和Port.

标准格局是 http(s)://hostname:port ; 好比 :8080 ;  https://192.168.1.1:9000;

注意,Urls可以加多个,暗示撑持差此外hostname和port映射. 此外, 还撑持*:9000 这样的格局,暗示映射所有HostName,这个和IIS映射配置其实是类似的.

public string ServerFactory { set; get; }

关键的来了,这个就是Server实现类的assembly name, 大家不难想到,通过这个属性,Host和Server是完全解耦的. 我们的这个Host可以和任何切合Owin接口的Server实现进行组合. 固然,目前还是使用自家的Server实现,请看下节.

Server实现和引用

Http Server并不是一两句代码可以实现的, 这里我们还是继续站在Kanata的肩膀上,借用它的Server实现.  他的Server实现包名为 :  Microsoft.Owin.Host.HttpListener (我认为这里的Host改名为Server越发贴切)

首先还是使用Nuget获取该Server组件

OWIN的理解和实践(二) – Host和Server的开发

安置,并引入项目,有了Server的实现,下面我们来完成StartOptions的界说代码:

//初始化StartOptions参数 StartOptions options = new StartOptions(); //处事器Url设置 options.Urls.Add(":9000"); options.Urls.Add(":8080"); //Server实现类库设置 options.ServerFactory = "Microsoft.Owin.Host.HttpListener";

需要注意的是,我这里特地放了2个port差此外地点,这2个Url都能起到效果; 此外Microsoft.Owin.Host.HttpListener 其实是默认的Host ServerFatory实现(最后一行代码可以省略); 但我们必需理解,这里是可以解耦的,我们完全可以桥接其他的Server实现.

Startup函数和使用

Startup函数非常的简单,就是一个只有一个没有返回值的,只有一个Owin.IAppBuilder参数的函数(函数名任意,不必然要叫Startup). 如以下代码: