OWIN啟動類檢測


每個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,然后點擊添加
    20140619200140
    下次再添加OWIN Startup類的時候,就可以直接從添加菜單中添加了。

    20140619201112

    也可以右擊項目,選擇添加,然后選擇新建項,然后選擇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運行程序。多刷新幾次試試。
  20140619210510
  注意:上圖中你看到的數字可能跟你的不一樣。當你刷新頁面時,使用毫秒字符串來顯示一個新的響應。你可以在輸出窗口看到跟蹤信息。
  20140619210941

添加更多啟動類

本節,將添加另外一個啟動類。可以在一個程序中添加多個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類運行。
    20140619214526
  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運行。

    20140619215000

  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

    命令窗口顯示如下:
    20140619221150

  5. 啟動瀏覽器,輸入地址:http://localhost:5000/
    20140619221351
    OwinHost遵循上面列出的約定。
  6. 在命令窗口中,按回車鍵退出OwinHost。
  7. 在ProductionStartup類中,添加下面的OwinStartup特性,並指定一個友好的名稱:ProductionConfiguration,(不要忘記編譯項目)。
    [assembly: OwinStartup("ProductionConfiguration",typeof(StartupDemo.ProductionStartup))]
  8. 在命令窗口中鍵入:
    ..\packages\Owinhost.2.1.0\tools\Owinhost.exe ProductionConfiguration

    Production啟動類被加載。
    20140619222219
    我們的程序有多個啟動類,在這個例子中,哪個啟動類被加載推遲到了運行時。

  9. 測試下面的運行時啟動項:
    ..\packages\Owinhost.2.1.0\tools\Owinhost.exe StartupDemo.TestStartup
    ..\packages\Owinhost.2.1.0\tools\Owinhost.exe "StartupDemo.TestStartup,StartupDemo"
    ..\packages\Owinhost.2.1.0\tools\Owinhost.exe StartupDemo.TestStartup.Configuration
    ..\packages\Owinhost.2.1.0\tools\Owinhost.exe"StartupDemo.TestStartup.Configuration,StartupDemo"

     

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM