Nancy之基于Nancy.Owin的小Demo
前面做了基于Nancy.Hosting.Aspnet和Nancy.Hosting.Self的小Demo
今天我们来做个基于Nancy.Owin的小Demo
开始之前我们来说说什么是Owin和Katana
什么是Owin呢?
官网地址:http://owin.org
OWIN在.NET Web Servers与Web Application之间定义了一套标准接口,OWIN的目标是用于解耦Web Server和Web Application。
什么是Katana呢?
官网地址:http://katanaproject.codeplex.com/
一把锐利的武士刀。
比较详细的介绍大家可以看看JustRun的文章:
下一代Asp.net开发规范OWIN(1)—— OWIN产生的背景以及简单介绍
下一代Asp.net开发规范OWIN(2)—— Katana介绍以及使用
介绍这两个不是今天的主题,所以下面就进入我们的正题了
一、新建一个空的asp.net程序
二、通过NuGet添加相关的程序集

Nancy.Owin,今天的主角。添加完这个后会自动添加Nancy

还有一个重要的角色是Microsoft.Owin.Host.SystemWeb,同时会自动添加依赖项:Owin和Microsoft.Owin
这个是通过Visual Studio 的Manage NuGet Packages来添加的,也可以在Package Manager Console输入
Install-Package Nancy.Owin
Install-Package Microsoft.Owin.Host.SystemWeb
来完成添加。
三、添加OWIN Startup Class
我们在添加的Startup.cs中的Configuration中添加一下代码,将Nancy交给Owin处理
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.UseNancy();
}
}
四、添加Modules文件夹用于存放我们的Modules
在Modules文件夹新建HomeModule.cs
public class HomeModule:NancyModule
{
public HomeModule()
{
Get["/"] = _ => "OwinDemo by Catcher Wong";
}
}
这里我们就显示一下文字,后面部署会用之前的MovieDemo来完成。
ok,看看效果!

这个是符合我们预期结果的。
注:1)、由于演示这里用的 Microsoft.Owin.Host.SystemWeb是3.0.1版本的所以不需要做额外的处理,
如果您的版本是1.x的话,请在web.config中添加如下配置
<appSettings>
<add key="owin:HandleAllRequests" value="true"/>
</appSettings>
在新版本中简化了我们的操作,可见还是很贴心的 O(∩_∩)O
2)、如果您需要用到除了Get、Post之外的方法(Put、Head、Delete)还需要在system.webServer节点做相应的修改
<system.webServer>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
五、多种运行调试方法,任君选择
到这里,我们可以发现,我们运行和调试还是借助的IIS Express。
我们有没有办法不用IIS Express来运行和调试呢?
当然是有的!!!而且不止一种!!下面我们就分别来介绍一下!!
方式一:借助OwinHost.exe
可以参考 Glavs的这篇博客: Owin, Katana and getting started
通过启动外部程序来实现!
在我们项目的属性中的web选项卡中做如下的修改

就修改一下属性即可。
再次运行,会发现启动了一个OwinHost.exe的程序,然后我们打开浏览器去看看

效果是不是一样啊,这就是第一种方式!
方式二:借助TinyFox(Jexus的姐妹)
这里我用的是TinyFox V2.3.2 跨平台通用版
下载地址: TinyFox V2.3.2 跨平台通用版
具体要怎么做呢?读读解压后的ReadMe.txt和看看里面附带的demo也就大概知道个所以然了。
做法跟katana的方式类似,都是通过启动外部程序来实现的。
但是区别还是有的。
我们需要添加一个Adapter.cs(这个我们可以在解压后的TinyFox中的Demo里找到,修改一下namespace即可!)
/**************************************************************************************
* === 通过Microsoft.Owin.dll运行Nancy的应用示例 ===
* ==================================================================================
* 目的:
* 演示如果将 NancyFx 加入到 Microsoft.Owin 的处理环节中,然后利用Nancy建立web应用。
* 使用方法:
* 将编译得到的dll连同Owin.dll、Microsoft.Owin.dll、Nancy.dll、Nancy.Owin.dll等文件
* 一并放置到网站的bin文件夹中
*************************************************************************************/ #region <USINGs> using System;
using System.Collections.Generic;
using Microsoft.Owin.Builder;
using System.Threading.Tasks; #endregion namespace OwinDemo
{ /// <summary>
/// 针对Microsoft.Owin的JWS开放接口适配器
/// <para>本接口适合兼容Microsoft.Owin规范的应用</para>
/// </summary>
class Adapter
{
static Func<IDictionary<string, object>, Task> _owinApp; /// <summary>
/// 默认构造函数
/// </summary>
public Adapter()
{
var builder = new AppBuilder();
var startup = new Startup();
startup.Configuration(builder);
_owinApp = builder.Build(); } /// <summary>
/// *** JWS所需要的关键函数 ***
/// <para>每个请求到来,JWS都会把请求打包成字典,调用这个函数</para>
/// </summary>
/// <param name="env">新请求的环境字典,具体内容参见OWIN标准</param>
/// <returns>返回一个正在运行或已经完成的任务</returns>
public Task OwinMain(IDictionary<string, object> env)
{
//如果为空
if (_owinApp == null) return null; //将请求交给Microsoft.Owin处理
return _owinApp(env);
} } //end class } //end namespace
做完这步,我们也是需要修改项目属性的web选项卡内容

做完上述工作,看看效果

一样的结果!!
六、部署到Linux下
前面也提到了,这里我们部署的是用之前的MovieDemo,这里是对其进行了修改,使其满足我们今天的主题。
这次的部署是结合TinyFox这只小狐狸来完成的。由于篇幅有点长,所以修改的代码不在这里展示,稍后会上传到GitHub
这里列出项目结构和进行一些说明:

会发现比上面演示的案例多了几个类:RazorConfig.cs和SiteRootPath.cs
其中
RazorConfig.cs是Razor的配置,因为我们这个Demo用到了Razor这个视图引擎,如果没用到可以不用这个。
SiteRootPath.cs是提供网站物理路径的类
这两个类我们都是能在TinyFox的Demo里面找到的!
现在我们将发布后的内容上传到 /var/www/owinnancy
在 /var/www/ 下新建一个文件夹owinnancy : mkdir owinnancy
ar/www/owinnancy -p 8181 



1、宇内大大在ReadMe.txt中是这样描述的(我只截取了部分内容)
问:网站文件放哪儿?
答:在TinyFox所在文件夹下的有一个名叫“site”的文件夹,这个文件夹中包括两个子目录,一个是wwwroot,
ar/www/下的某个文件夹,所以是采用了自定义路径的形式。2、次要说明,本来这篇是要在昨天发的,但因有事没能及时发布!再说昨天是科比81分之夜的十周年,所以取8181端口纪念一下。O(∩_∩)O




Nancy之基于Nancy.Owin的小Demo的更多相关文章
- Nancy之基于Nancy.Hosting.Self的小Demo
继昨天的Nancy之基于Nancy.Hosting.Aspnet的小Demo后, 今天来做个基于Nancy.Hosting.Self的小Demo. 关于Self Hosting Nancy,官方文档的 ...
- 一个基于ES5的vue小demo
由于现在很多vue项目都是基于ES6开发的,而我学vue的时候大多是看vue官网的API,是基于ES5的,所以对于刚接触项目的我来说要转变为项目的模块化写法确实有些挑战.因此,我打算先做一个基于ES5 ...
- 基于BaseAdapter的Listview小Demo
ListView是android开发中比较常用的控件, 其中适配器模式可以选择: ArrayAdapter:简单易用,通常用于将数组或者List集合的读个包值封装成多个列表项 SimpleAdapte ...
- Nancy之基于Nancy.Hosting.Aspnet的小Demo
近来学习了一下Nancy这个框架,感觉挺好用的,就写篇简单的文章记录一下大致用法,由于是刚接触,写的代码 可能不规范,也没有具体的分层..莫吐槽... Nancy的官网:http://nancyfx. ...
- Nancy之基于Self Hosting的补充小Demo
前面把Hosting Nancy with ASP.NET.Self Hosting Nancy和Hosting Nancy with OWIN 以demo的形式简单描述了一下. 这篇是为Self H ...
- 一个基于ES6+webpack的vue小demo
上一篇文章<一个基于ES5的vue小demo>我们讲了如何用ES5,vue-router做一个小demo,接下来我们来把它变成基于ES6+webpack的demo. 一.环境搭建及代码转换 ...
- 新手 gulp+ seajs 小demo
首先,不说废话,它的介绍和作者就不在多说了,网上一百度一大堆: 我在这里只是来写写我这2天抽空对seajs的了解并爬过的坑,和实现的一个小demo(纯属为了实现,高手请绕道); 一.环境工具及安装 1 ...
- Android学习小Demo一个显示行线的自定义EditText
今天在处理一个EditText的时候,想着把EditText做成像一本作业本上的纸一样,每一行都可以由线条隔开,具体效果如下: 1)最开始的思路 一开始的想法是很简单的,找出每一行的高度,然后一行一行 ...
- Android -BLE蓝牙小DEMO
代码地址如下:http://www.demodashi.com/demo/13890.html 原文地址: https://blog.csdn.net/vnanyesheshou/article/de ...
随机推荐
- Third Day:正式编程第三天,学习实践内容TextView跑马灯、AutoCompleteTextView、multiAutoCompleteTextView以及ToggleButton、checkedBox、RadioButton等相关实践
2.针对Focused的TextView跑马灯(文字较多一行无法显示)效果 针对单个TextView的跑马灯效果,可直接在TextView控件参数中添加三个属性: android:singleLine ...
- 在iOS中使用ZXing库[转]
前言 ZXing(Github镜像地址)是一个开源的条码生成和扫描库(开源协议为Apache2.0).它不但支持众多的条码格式,而且有各种语言的实现版本,它支持的语言包括:Java, C++, C#, ...
- JavaScript异步编程原理
众所周知,JavaScript 的执行环境是单线程的,所谓的单线程就是一次只能完成一个任务,其任务的调度方式就是排队,这就和火车站洗手间门口的等待一样,前面的那个人没有搞定,你就只能站在后面排队等着. ...
- 作业二:个人编程项目——编写一个能自动生成小学四则运算题目的程序
1. 编写一个能自动生成小学四则运算题目的程序.(10分) 基本要求: 除了整数以外,还能支持真分数的四则运算. 对实现的功能进行描述,并且对实现结果要求截图. 本题发一篇随笔,内容包括: 题 ...
- 《CLR.via.C#第三版》第二部分第12章节 泛型 读书笔记(六)
终于讲到泛型了.当初看到这个书名,最想看的就是作者对泛型,委托,反射这些概念的理解.很多人对泛型的理解停留在泛型集合上,刚开始我也是,随着项目越做越多,对待泛型的认识也越来越深刻. 泛型的概念:泛型是 ...
- 【VC++技术杂谈002】打印技术之获取及设置系统默认打印机
本文主要介绍如何获取以及设置系统的默认打印机. 1.获取系统中的所有打印机 获取系统中的所有打印机可以使用EnumPrinters()函数,该函数可以枚举全部的本地.网络打印机信息.其函数原型为: B ...
- 《Entity Framework 6 Recipes》中文翻译系列 (12) -----第三章 查询之使用SQL语句
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 3-2使用原生SQL语句更新 问题 你想在实体框架中使用原生的SQL语句,来更新底层 ...
- Atitit 软件开发中 瓦哈比派的核心含义以及修行方法以及对我们生活与工作中的指导意义
Atitit 软件开发中 瓦哈比派的核心含义以及修行方法以及对我们生活与工作中的指导意义 首先我们指明,任何一种行动以及教派修行方法都有他的多元化,只看到某一方面,就不能很好的评估利弊,适不适合自己使 ...
- C语言-指针
C指针基础知识 C语言中,指针无疑是最令人头疼的.今天无事就来学学C语言的指针,在此留下点笔记,仅供个人参考. 首先要搞懂的是,指针是什么? 指针:是用来存放内存地址的变量. 不管是什么类型的指针,存 ...
- DataBase异常状态:Recovery Pending,Suspect,估计Recovery的剩余时间
一,RECOVERY PENDING状态 今天修改了SQL Server的Service Account的密码,然后重启SQL Server的Service,发现有db处于Recovery Pendi ...