每个OWIN应用程序都有一个启动类,可以在这个类里为应用程序管道指定组件。有不同的方式可以将启动类与运行时关联起来,这依赖于选择的托管模型(OwinHost,IIS,IIS-Express)。本教程中的启动类可以用在每个托管的程序中。可以使用下面这些方法中的一种将启动类与运行时进行关联。

  1. 命名约定:Katana在匹配的程序集或全局命名空间中查找名为Startup的类。
  2. OwinStartup特性:大多数开发人员使用这种方法指定启动类。下面的特性设置StartupDemo命名空间中的TestStartup类为启动类。
    [assembly: OwinStartup(typeof(StartupDemo.TestStartup))]

    OwinStartup特性重写了命名约定。可以使用这个特性指定一个友好的名字,然而,使用友好的名字还需要使用配置文件的appSetting元素。

  3. 配置文件的appSetting:appSetting元素重写了OwinStartup特性和命名约定。可以有多个启动类(每个使用OwinStartup特性),在配置文件中使用类似于下面的标记配置哪个启动类被加载。
    <appSettings>
    <add key="owin:appStartup" value="StartupDemo.ProductionStartup" />
    </appSettings>

    也可以显示指定启动类和程序集:

    <add key="owin:appStartup" value="StartupDemo.ProductionStartup, StartupDemo" />

    下面的XML指定了一个名为ProductionConfiguration的友好的启动类名称:

    <appSettings>
    <add key="owin:appStartup" value="ProductionConfiguration" />
    </appSettings>

    上面的标记必须和下面的OwinStartup特性一起使用来引起ProductionStartup2类运行。

    [assembly: OwinStartup("ProductionConfiguration",typeof(StartupDemo.ProductionStartup2))]
    
    namespace StartupDemo
    {
    public class ProductionStartup
    {
    public void Configuration(IAppBuilder app)
    {
    app.Run(context =>
    {
    string t = DateTime.Now.Millisecond.ToString();
    return context.Response.WriteAsync(t + " Production OWIN App");
    });
    }
    }
    public class ProductionStartup2
    {
    public void Configuration(IAppBuilder app)
    {
    app.Run(context =>
    {
    string t = DateTime.Now.Millisecond.ToString();
    return context.Response.WriteAsync(t + " 2nd Production OWIN App");
    });
    }
    }
    }
  4. 设置appSetting的owin:AutomaticAppStartup值为false禁用OWIN启动发现:
    <add key="owin:AutomaticAppStartup " value="false" />

使用OWIN Startup创建 ASP.NET Web App

  1. 创建一个空的ASP.NET web程序,命名为StartupDemo
  2. 使用NuGet程序包管理器安装Microsoft.Owin.Host.SystemWeb。
    Install-Package Microsoft.Owin.Host.SystemWeb
  3. 添加一个OWIN启动类。Visual Studio 2013中,在项目上右击,选择添加类
  4. 弹出添加新项对话框,在搜索框中输入OWIN,更改名字为Startup.cs,然后点击添加

    下次再添加OWIN Startup类的时候,就可以直接从添加菜单中添加了。

    

    也可以右击项目,选择添加,然后选择新建项,然后选择Owin Startup类。

  5.将Startup.cs文件替换成如下代码:

using System;
using System.Threading.Tasks;
using Microsoft.Owin;
using Owin;
using System.IO; //[assembly: OwinStartup(typeof(StartupDemo.Startup))] namespace StartupDemo
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.Use((context, next) =>
{
TextWriter output = context.Get<TextWriter>("host.TraceOutput");
return next().ContinueWith(result =>
{
output.WriteLine("Scheme {0} : Method {1} : Path {2} : MS {3}",
context.Request.Scheme, context.Request.Method, context.Request.Path, getTime());
});
}); app.Run(async context =>
{
await context.Response.WriteAsync(getTime() + " My First OWIN App");
});
} string getTime()
{
return DateTime.Now.Millisecond.ToString();
}
}
}

app.Use拉姆达表达式注册指定的中间件到OWIN管道。在这个例子中,我们在响应传入请求前建立传入请求的日志记录。next参数是管道中下一个组件的委托。app.Run拉姆达表达式将管道挂钩到传入请求并提供响应机制。注意:在上面的代码,注释掉了OwinStartup特性,我们依赖于运行名为Startup的类这一约定。

6.按F5运行程序。多刷新几次试试。
  
  注意:上图中你看到的数字可能跟你的不一样。当你刷新页面时,使用毫秒字符串来显示一个新的响应。你可以在输出窗口看到跟踪信息。
  

添加更多启动类

本节,将添加另外一个启动类。可以在一个程序中添加多个OWIN启动类。比如,你可能想创建用于开发的启动类、测试的启动类和生产的启动类。

  1. 创建一个OWIN Startup类,命名为ProductionStartup。
  2. 使用下面的代码替换。
    [assembly: OwinStartup(typeof(StartupDemo.ProductionStartup))]
    
    namespace StartupDemo
    {
    public class ProductionStartup
    {
    public void Configuration(IAppBuilder app)
    {
    app.Run(context =>
    {
    string t = DateTime.Now.Millisecond.ToString();
    return context.Response.WriteAsync(t + " Production OWIN App");
    });
    }
    }
    }
  3. 按Ctrl+F5运行程序。OwinStartup特性指定production startup类运行。
  4. 创建另一个OWIN Startup类,命名为TestStartup。
  5. 使用下面的代码替换。
    [assembly: OwinStartup("TestingConfiguration", typeof(StartupDemo.TestStartup))]
    
    namespace StartupDemo
    {
    public class TestStartup
    {
    public void Configuration(IAppBuilder app)
    {
    app.Run(context =>
    {
    string t = DateTime.Now.Millisecond.ToString();
    return context.Response.WriteAsync(t + " Test OWIN App");
    });
    }
    }
    }

    OwinStartup特性重载指定TestingConfiguration作为Startup类的友好名称。

  6. 打开web.config文件,添加OWIN App startup键指定Startup类的友好名称。
    <appSettings>
    <add key="owin:appStartup" value="TestingConfiguration" />
    </appSettings>
  7. 按Ctrl+F5运行程序。app settings元素优先,test configuration运行。

    

  8.  从TestStartup类的OwinStartup特性上移除友好名称。

[assembly: OwinStartup(typeof(StartupDemo.TestStartup))]

在web.config文件中修改OWIN App startup键入如下:

<addkey="owin:appStartup"value="StartupDemo.TestStartup"/>

  10. 恢复每个类的OwinStartup到Visual Studio生成的默认特性。

[assembly: OwinStartup(typeof(StartupDemo.Startup))]

[assembly: OwinStartup(typeof(StartupDemo.ProductionStartup))]

[assembly: OwinStartup(typeof(StartupDemo.TestStartup))]

11. 下面的每一个OWIN App startup键都会引起production类运行。

<addkey="owin:appStartup"value="StartupDemo.ProductionStartup"/>

<addkey="owin:appStartup"value="StartupDemo.ProductionStartup, StartupDemo"/>

<addkey="owin:appStartup"value="StartupDemo.ProductionStartup.Configuration, StartupDemo"/>

12.最后一个startup键指定startup的配置方法。下面的OWIN App startup键允许修改Configuration方法名为MyConfiguration。

<addkey="owin:appStartup"value="StartupDemo.ProductionStartup2.MyConfiguration"/>

使用Owinhost.exe

  1. 使用下面的标记替换web.config文件的appSettings。

    <appSettings>
    <add key="owin:appStartup" value="StartupDemo.Startup" />
    <add key="owin:appStartup" value="StartupDemo.TestStartup" />
    </appSettings>

    最后一个键胜出,所以本例中TestStartup被指定。

  2. 从PMC中安装Owinhost
    Install-Package OwinHost
  3. 导航到程序文件夹(包含web.config的文件夹),按住Shift键右击,选择“在此处打开命令窗口”。
  4. 在命令窗口中,键入以下命令:
    ..\packages\Owinhost<Version>\tools\Owinhost.exe

    命令窗口显示如下:

  5. 启动浏览器,输入地址:http://localhost:5000/

    OwinHost遵循上面列出的约定。
  6. 在命令窗口中,按回车键退出OwinHost。
  7. 在ProductionStartup类中,添加下面的OwinStartup特性,并指定一个友好的名称:ProductionConfiguration,(不要忘记编译项目)。
    [assembly: OwinStartup("ProductionConfiguration",typeof(StartupDemo.ProductionStartup))]
  8. 在命令窗口中键入:
    ..\packages\Owinhost.2.1.\tools\Owinhost.exe ProductionConfiguration

    Production启动类被加载。

    我们的程序有多个启动类,在这个例子中,哪个启动类被加载推迟到了运行时。

  9. 测试下面的运行时启动项:
    ..\packages\Owinhost.2.1.\tools\Owinhost.exe StartupDemo.TestStartup
    ..\packages\Owinhost.2.1.\tools\Owinhost.exe "StartupDemo.TestStartup,StartupDemo"
    ..\packages\Owinhost.2.1.\tools\Owinhost.exe StartupDemo.TestStartup.Configuration
    ..\packages\Owinhost.2.1.\tools\Owinhost.exe"StartupDemo.TestStartup.Configuration,StartupDemo"

OWIN启动类检测的更多相关文章

  1. OWIN启动项的检测

    OWIN启动项的检测 通过以下方法设置启动项: 命名约定 Katana在命名空间内查找StartUp类 OwinStartup Attribute [assembly: OwinStartup(typ ...

  2. 利用 Win32 启动和检测 UWP App 的方法

    一种启动和检测 UWP 应用的方法 背景 我们发布过多款 UWP 平台的同类型 App ,最近有一个需求:用传统 Win32 程序启动我们的 UWP 程序.因为我们的每一个UWP App在客户机器上都 ...

  3. owin启动事项

    在上下文中找不到 owin.Environment 项 owin没有启动. 尝试加载应用时出现了以下错误.- 找不到包含 OwinStartupAttribute 的程序集 startup类不是通过v ...

  4. 4.3、Libgdx启动类和配置

    (原文:http://www.libgdx.cn/topic/45/4-3-libgdx%E5%90%AF%E5%8A%A8%E7%B1%BB%E4%B8%8E%E9%85%8D%E7%BD%AE) ...

  5. 【Owin 学习系列】2. Owin Startup 类解析

    Owin Startup 类解析 每个 Owin 程序都有 startup 类,在这个 startup 类里面你可以指定应用程序管道模型中的组件.你可以通过不同的方式来连接你的 startup 类和运 ...

  6. Miner.java 爬虫启动类

    Miner.java 爬虫启动类 package com.iteye.injavawetrust.miner; import java.util.concurrent.ThreadPoolExecut ...

  7. SpringCloud启动类指定扫描包路径

    //如果这个启动类所在的包路径隐藏的很深,则需要指定扫描包.否则默认扫描启动类所在的子包路径下 @SpringBootApplication(scanBasePackages="com.jo ...

  8. maven项目pom.xml添加main启动类

    pom.xml配置添加main启动类: <build> <finalName>MyApp</finalName> <!-- 最终package打包的jar名称 ...

  9. springBoot项目启动类启动无法访问

    springBoot项目启动类启动无法访问. 网上也查了一些资料,我这里总结.下不来虚的,也不废话. 解决办法: 1.若是maven项目,则找到右边Maven Projects --->Plug ...

随机推荐

  1. vue 关闭微信浏览器(返回路由为undefined时)

    参考:https://blog.csdn.net/KingJin_CSDN_/article/details/77050569 main.js: import router from './route ...

  2. 记一次log4j日志文件小事故

    最近散仙在做公司的一个跟搜索有关的数据分析项目,主要就是统计搜索的转化率,目的主要有以下几个: (1)通过数据分析挖掘,找出搜索业务在整个平台系统里的GMV里所占份额 (2)给公司的搜索算法调优,提供 ...

  3. Sqoop学习笔记_Sqoop的基本使用二(sqoop的import与export)

    Sqoop抽取从mysql抽取到hive sqoop抽取到mysql一样有两种方式一种是用command line的方式,一种是用sqoop opt文件调用的方式.(由于两种sqoop一已经记录了,现 ...

  4. Python-爬虫实战 简单爬取豆瓣top250电影保存到本地

    爬虫原理 发送数据 获取数据 解析数据 保存数据 requests请求库 res = requests.get(url="目标网站地址") 获取二进制流方法:res.content ...

  5. redis-cli启动问题

    首先需要找到redis的所在目录,然后将redis.conf复制到/etc/redis.conf 另外需要将redis.conf文件中的 daemonize no 设置为 daemonize yes. ...

  6. IIS发布web应用程序之再折腾

    最近几个月发布程序比较多,遇到了各种IIS发布web程序后无法访问的问题.原以为对各种问题都已经摸的差不多了,但今天又为一问题折腾了大半天.具体过程祥记如下: 在server2008 R2 64位系统 ...

  7. V8:V8(Javascript引擎)

    ylbtech-V8:V8(Javascript引擎) Lars Bak是这个项目的组长,目前该JavaScript引擎已用于其它项目的开发.第一个版本随着第一个版本的Chrome于2008年9月2日 ...

  8. SPSS分析技术:CMH检验(分层卡方检验);辛普森悖论,数据分析的谬误

    SPSS分析技术:CMH检验(分层卡方检验):辛普森悖论,数据分析的谬误 只涉及两个分类变量的卡方检验有些时候是很局限的,因为混杂因素总是存在,如果不考虑混杂因素,得出的分析结论很可能是谬误的,这就是 ...

  9. mysql基本笔记之二

    1.查看当前编码 show variables like '%char%' 2.修改user表中id=1的name 为 A  where后面是条件,就是定位 3.符号 > //大于符号 < ...

  10. js+php如何实现上传图片

    近期有一些朋友,在做上传图片这一块的时候进度卡住了.有个朋友说,我已经在这个问题上浪费了一天了. 确实,对于新手而言,上传图片成了比较复杂的的一个事,今天整理了一下常用的两种方式,让新手轻松掌握上传图 ...