Nancy之基于Nancy.Owin的小Demo
前面做了基于Nancy.Hosting.Aspnet和Nancy.Hosting.Self的小Demo
今天我們來做個(gè)基于Nancy.Owin的小Demo
開始之前我們來說說什么是Owin和Katana
什么是Owin呢?
官網(wǎng)地址:http://owin.org
OWIN在.NET Web Servers與Web Application之間定義了一套標(biāo)準(zhǔn)接口,OWIN的目標(biāo)是用于解耦Web Server和Web Application。
什么是Katana呢?
官網(wǎng)地址:http://katanaproject.codeplex.com/
一把銳利的武士刀。
比較詳細(xì)的介紹大家可以看看JustRun的文章:
下一代Asp.net開發(fā)規(guī)范OWIN(1)—— OWIN產(chǎn)生的背景以及簡(jiǎn)單介紹
下一代Asp.net開發(fā)規(guī)范OWIN(2)—— Katana介紹以及使用
介紹這兩個(gè)不是今天的主題,所以下面就進(jìn)入我們的正題了
一、新建一個(gè)空的asp.net程序
二、通過NuGet添加相關(guān)的程序集
Nancy.Owin,今天的主角。添加完這個(gè)后會(huì)自動(dòng)添加Nancy
還有一個(gè)重要的角色是Microsoft.Owin.Host.SystemWeb,同時(shí)會(huì)自動(dòng)添加依賴項(xiàng):Owin和Microsoft.Owin
這個(gè)是通過Visual Studio 的Manage?NuGet Packages來添加的,也可以在Package Manager Console輸入
Install-Package Nancy.Owin
Install-Package Microsoft.Owin.Host.SystemWeb
來完成添加。
三、添加OWIN Startup Class
我們?cè)谔砑拥腟tartup.cs中的Configuration中添加一下代碼,將Nancy交給Owin處理
1 public class Startup 2 { 3 public void Configuration(IAppBuilder app) 4 { 5 app.UseNancy(); 6 } 7 }四、添加Modules文件夾用于存放我們的Modules
在Modules文件夾新建HomeModule.cs
1 public class HomeModule:NancyModule 2 { 3 public HomeModule() 4 { 5 Get["/"] = _ => "OwinDemo by Catcher Wong"; 6 } 7 }這里我們就顯示一下文字,后面部署會(huì)用之前的MovieDemo來完成。
ok,看看效果!
這個(gè)是符合我們預(yù)期結(jié)果的。
注:1)、由于演示這里用的 Microsoft.Owin.Host.SystemWeb是3.0.1版本的所以不需要做額外的處理,
如果您的版本是1.x的話,請(qǐng)?jiān)趙eb.config中添加如下配置
1 <appSettings> 2 <add key="owin:HandleAllRequests" value="true"/> 3 </appSettings>在新版本中簡(jiǎn)化了我們的操作,可見還是很貼心的?O(∩_∩)O
2)、如果您需要用到除了Get、Post之外的方法(Put、Head、Delete)還需要在system.webServer節(jié)點(diǎn)做相應(yīng)的修改
1 <system.webServer> 2 <handlers> 3 <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 4 <remove name="OPTIONSVerbHandler" /> 5 <remove name="TRACEVerbHandler" /> 6 <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 7 </handlers> 8 </system.webServer>五、多種運(yùn)行調(diào)試方法,任君選擇
到這里,我們可以發(fā)現(xiàn),我們運(yùn)行和調(diào)試還是借助的IIS Express。
我們有沒有辦法不用IIS Express來運(yùn)行和調(diào)試呢?
當(dāng)然是有的!!!而且不止一種!!下面我們就分別來介紹一下!!
方式一:借助OwinHost.exe
可以參考 Glavs的這篇博客:?Owin, Katana and getting started
通過啟動(dòng)外部程序來實(shí)現(xiàn)!
在我們項(xiàng)目的屬性中的web選項(xiàng)卡中做如下的修改
就修改一下屬性即可。
再次運(yùn)行,會(huì)發(fā)現(xiàn)啟動(dòng)了一個(gè)OwinHost.exe的程序,然后我們打開瀏覽器去看看
效果是不是一樣啊,這就是第一種方式!
方式二:借助TinyFox(Jexus的姐妹)
這里我用的是TinyFox V2.3.2 跨平臺(tái)通用版
下載地址: TinyFox V2.3.2 跨平臺(tái)通用版?
具體要怎么做呢?讀讀解壓后的ReadMe.txt和看看里面附帶的demo也就大概知道個(gè)所以然了。
做法跟katana的方式類似,都是通過啟動(dòng)外部程序來實(shí)現(xiàn)的。
但是區(qū)別還是有的。
我們需要添加一個(gè)Adapter.cs(這個(gè)我們可以在解壓后的TinyFox中的Demo里找到,修改一下namespace即可!)
1 /************************************************************************************** 2 * === 通過Microsoft.Owin.dll運(yùn)行Nancy的應(yīng)用示例 === 3 * ================================================================================== 4 * 目的: 5 * 演示如果將 NancyFx 加入到 Microsoft.Owin 的處理環(huán)節(jié)中,然后利用Nancy建立web應(yīng)用。 6 * 使用方法: 7 * 將編譯得到的dll連同Owin.dll、Microsoft.Owin.dll、Nancy.dll、Nancy.Owin.dll等文件 8 * 一并放置到網(wǎng)站的bin文件夾中 9 *************************************************************************************/ 10 11 12 13 #region <USINGs> 14 15 using System; 16 using System.Collections.Generic; 17 using Microsoft.Owin.Builder; 18 using System.Threading.Tasks; 19 20 #endregion 21 22 23 24 namespace OwinDemo 25 { 26 27 /// <summary> 28 /// 針對(duì)Microsoft.Owin的JWS開放接口適配器 29 /// <para>本接口適合兼容Microsoft.Owin規(guī)范的應(yīng)用</para> 30 /// </summary> 31 class Adapter 32 { 33 static Func<IDictionary<string, object>, Task> _owinApp; 34 35 /// <summary> 36 /// 默認(rèn)構(gòu)造函數(shù) 37 /// </summary> 38 public Adapter() 39 { 40 var builder = new AppBuilder(); 41 var startup = new Startup(); 42 startup.Configuration(builder); 43 _owinApp = builder.Build(); 44 45 } 46 47 48 /// <summary> 49 /// *** JWS所需要的關(guān)鍵函數(shù) *** 50 /// <para>每個(gè)請(qǐng)求到來,JWS都會(huì)把請(qǐng)求打包成字典,調(diào)用這個(gè)函數(shù)</para> 51 /// </summary> 52 /// <param name="env">新請(qǐng)求的環(huán)境字典,具體內(nèi)容參見OWIN標(biāo)準(zhǔn)</param> 53 /// <returns>返回一個(gè)正在運(yùn)行或已經(jīng)完成的任務(wù)</returns> 54 public Task OwinMain(IDictionary<string, object> env) 55 { 56 //如果為空 57 if (_owinApp == null) return null; 58 59 //將請(qǐng)求交給Microsoft.Owin處理 60 return _owinApp(env); 61 } 62 63 64 } //end class 65 66 67 } //end namespace做完這步,我們也是需要修改項(xiàng)目屬性的web選項(xiàng)卡內(nèi)容
做完上述工作,看看效果
一樣的結(jié)果!!
六、部署到Linux下
前面也提到了,這里我們部署的是用之前的MovieDemo,這里是對(duì)其進(jìn)行了修改,使其滿足我們今天的主題。
這次的部署是結(jié)合TinyFox這只小狐貍來完成的。由于篇幅有點(diǎn)長(zhǎng),所以修改的代碼不在這里展示,稍后會(huì)上傳到GitHub
這里列出項(xiàng)目結(jié)構(gòu)和進(jìn)行一些說明:
會(huì)發(fā)現(xiàn)比上面演示的案例多了幾個(gè)類:RazorConfig.cs和SiteRootPath.cs
其中
RazorConfig.cs是Razor的配置,因?yàn)槲覀冞@個(gè)Demo用到了Razor這個(gè)視圖引擎,如果沒用到可以不用這個(gè)。
SiteRootPath.cs是提供網(wǎng)站物理路徑的類
這兩個(gè)類我們都是能在TinyFox的Demo里面找到的!
現(xiàn)在我們將發(fā)布后的內(nèi)容上傳到 /var/www/owinnancy
在 /var/www/ 下新建一個(gè)文件夾owinnancy : mkdir owinnancy
然后進(jìn)入 tinyfox的目錄 cd /usr/tinyfox-2.3 執(zhí)行./fox.sh?-root?ar/www/owinnancy?-p?8181? 已經(jīng)啟動(dòng)成功了,下面就是訪問看看OK否。打開瀏覽器訪問這個(gè)demo試試。順便放上幾張圖看看效果。? 幾點(diǎn)必要的說明1、宇內(nèi)大大在ReadMe.txt中是這樣描述的(我只截取了部分內(nèi)容)
問:網(wǎng)站文件放哪兒?
???? 答:在TinyFox所在文件夾下的有一個(gè)名叫“site”的文件夾,這個(gè)文件夾中包括兩個(gè)子目錄,一個(gè)是wwwroot, ?用戶存放傳統(tǒng)的網(wǎng)站文件或靜態(tài)文件,另一個(gè)是approot,用于存放用戶的程序集及其相關(guān)依賴的dll,當(dāng)然, dll文件也可以存放在wwwroot下的bin文件夾中; 問:如果我的網(wǎng)站文件夾不在tinyfox默認(rèn)的位置,怎么設(shè)定? ?答:在TinyFox.exe?后邊加上一個(gè)形如“-root?路徑”這樣的參數(shù),如:“tinyfox?-root?d:\mysite\wwwroot” ? ?由于習(xí)慣問題,我是將網(wǎng)站放在 /var/www/下的某個(gè)文件夾,所以是采用了自定義路徑的形式。
2、次要說明,本來這篇是要在昨天發(fā)的,但因有事沒能及時(shí)發(fā)布!再說昨天是科比81分之夜的十周年,所以取8181端口紀(jì)念一下。O(∩_∩)O 2016.01.25重要補(bǔ)充:Linux部署結(jié)合Jexus 前面的部署是結(jié)合TinyFox來完成的,現(xiàn)在補(bǔ)充結(jié)合Jexus的方式部署的注意事項(xiàng)。 由于昨天嘗試在jexus部署時(shí)沒有成功,所以就沒往這個(gè)方面寫。剛才得到宇內(nèi)大大的指點(diǎn),已經(jīng)把這個(gè)Demo(符合Owin標(biāo)準(zhǔn))結(jié)合Jexus部署成功! 下面是他的原話 "不需要修改源碼,只需要在網(wǎng)站配置文件中,在OwinMain=xxx.dll 這一行,指定含有“適配器”的那個(gè)dll就行了。" 這個(gè)適配器指的是我們?cè)创a中Adapter.cs,含有的那個(gè)dll自然就是MovieDemoWithOwin.dll 二話不說,我們?cè)囋?/strong> 修改我們這個(gè)的網(wǎng)站的配置文件: vim /usr/jexus/siteconf/owinnancy 基本是保持默認(rèn)的配置。具體的配置如下: 然后重啟我們的網(wǎng)站 /usr/jexus/./jws restart owinnancy 重啟OK!訪問試試 成功了!! 另外還要說一句,如果沒有加至關(guān)重要的那一句,訪問就是一片空白! 最后是部署所用的MovieDemo,其實(shí)跟之前的沒多少差別。 下載地址: https://github.com/hwqdt/Demos/tree/master/NancyDemoWithOwin/MovieDemoWithOwin 下一篇將會(huì)是對(duì) Self Hosing 的一點(diǎn)點(diǎn)補(bǔ)充,敬請(qǐng)期待。
轉(zhuǎn)載于:https://www.cnblogs.com/catcher1994/p/5154913.html
總結(jié)
以上是生活随笔為你收集整理的Nancy之基于Nancy.Owin的小Demo的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ionic路由(一)
- 下一篇: Java 程序性能优化《第一章》Java