Nancy之基于Nancy.Owin的小Demo

时间:2023-02-20 20:26:39

前面做了基于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之基于Nancy.Owin的小Demo

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

Nancy之基于Nancy.Owin的小Demo

还有一个重要的角色是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,看看效果!

Nancy之基于Nancy.Owin的小Demo

这个是符合我们预期结果的。

注: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选项卡中做如下的修改

Nancy之基于Nancy.Owin的小Demo

就修改一下属性即可。

再次运行,会发现启动了一个OwinHost.exe的程序,然后我们打开浏览器去看看

Nancy之基于Nancy.Owin的小Demo

效果是不是一样啊,这就是第一种方式!

方式二:借助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选项卡内容

Nancy之基于Nancy.Owin的小Demo

做完上述工作,看看效果

Nancy之基于Nancy.Owin的小Demo

一样的结果!!

六、部署到Linux下

前面也提到了,这里我们部署的是用之前的MovieDemo,这里是对其进行了修改,使其满足我们今天的主题。

这次的部署是结合TinyFox这只小狐狸来完成的。由于篇幅有点长,所以修改的代码不在这里展示,稍后会上传到GitHub

这里列出项目结构和进行一些说明:

Nancy之基于Nancy.Owin的小Demo

会发现比上面演示的案例多了几个类:RazorConfig.cs和SiteRootPath.cs

其中

RazorConfig.cs是Razor的配置,因为我们这个Demo用到了Razor这个视图引擎,如果没用到可以不用这个。

SiteRootPath.cs是提供网站物理路径的类

这两个类我们都是能在TinyFox的Demo里面找到的!

现在我们将发布后的内容上传到 /var/www/owinnancy

在 /var/www/ 下新建一个文件夹owinnancy : mkdir owinnancy

然后进入 tinyfox的目录 cd /usr/tinyfox-2.3
执行./fox.sh -root Nancy之基于Nancy.Owin的小Demoar/www/owinnancy -p 8181 
Nancy之基于Nancy.Owin的小Demo
已经启动成功了,下面就是访问看看OK否。打开浏览器访问这个demo试试。顺便放上几张图看看效果。 
Nancy之基于Nancy.Owin的小Demo
Nancy之基于Nancy.Owin的小Demo
 Nancy之基于Nancy.Owin的小Demo
 
 几点必要的说明
1、宇内大大在ReadMe.txt中是这样描述的(我只截取了部分内容)
  问:网站文件放哪儿?
      答:在TinyFox所在文件夹下的有一个名叫“site”的文件夹,这个文件夹中包括两个子目录,一个是wwwroot,
      用户存放传统的网站文件或静态文件,另一个是approot,用于存放用户的程序集及其相关依赖的dll,当然,
     dll文件也可以存放在wwwroot下的bin文件夹中;
  问:如果我的网站文件夹不在tinyfox默认的位置,怎么设定?
    答:在TinyFox.exe 后边加上一个形如“-root 路径”这样的参数,如:“tinyfox -root d:\mysite\wwwroot”
 
   由于习惯问题,我是将网站放在 /vNancy之基于Nancy.Owin的小Demoar/www/下的某个文件夹,所以是采用了自定义路径的形式。

2、次要说明,本来这篇是要在昨天发的,但因有事没能及时发布!再说昨天是科比81分之夜的十周年,所以取8181端口纪念一下。O(∩_∩)O
 
 
2016.01.25重要补充:Linux部署结合Jexus
前面的部署是结合TinyFox来完成的,现在补充结合Jexus的方式部署的注意事项。
由于昨天尝试在jexus部署时没有成功,所以就没往这个方面写。刚才得到宇内大大的指点,已经把这个Demo(符合Owin标准)结合Jexus部署成功!
下面是他的原话
"不需要修改源码,只需要在网站配置文件中,在OwinMain=xxx.dll 这一行,指定含有“适配器”的那个dll就行了。"
这个适配器指的是我们源码中Adapter.cs,含有的那个dll自然就是MovieDemoWithOwin.dll
二话不说,我们试试
修改我们这个的网站的配置文件: vim /usr/jexus/siteconf/owinnancy
基本是保持默认的配置。具体的配置如下:
Nancy之基于Nancy.Owin的小Demo
然后重启我们的网站 /usr/jexus/./jws restart owinnancy
Nancy之基于Nancy.Owin的小Demo
重启OK!访问试试
Nancy之基于Nancy.Owin的小Demo
成功了!!
另外还要说一句,如果没有加至关重要的那一句,访问就是一片空白!
Nancy之基于Nancy.Owin的小Demo
 
 
最后是部署所用的MovieDemo,其实跟之前的没多少差别。
下载地址:
 
下一篇将会是对 Self Hosing 的一点点补充,敬请期待。
 

Nancy之基于Nancy.Owin的小Demo的更多相关文章

  1. Nancy之基于Nancy&period;Hosting&period;Self的小Demo

    继昨天的Nancy之基于Nancy.Hosting.Aspnet的小Demo后, 今天来做个基于Nancy.Hosting.Self的小Demo. 关于Self Hosting Nancy,官方文档的 ...

  2. 一个基于ES5的vue小demo

    由于现在很多vue项目都是基于ES6开发的,而我学vue的时候大多是看vue官网的API,是基于ES5的,所以对于刚接触项目的我来说要转变为项目的模块化写法确实有些挑战.因此,我打算先做一个基于ES5 ...

  3. 基于BaseAdapter的Listview小Demo

    ListView是android开发中比较常用的控件, 其中适配器模式可以选择: ArrayAdapter:简单易用,通常用于将数组或者List集合的读个包值封装成多个列表项 SimpleAdapte ...

  4. Nancy之基于Nancy&period;Hosting&period;Aspnet的小Demo

    近来学习了一下Nancy这个框架,感觉挺好用的,就写篇简单的文章记录一下大致用法,由于是刚接触,写的代码 可能不规范,也没有具体的分层..莫吐槽... Nancy的官网:http://nancyfx. ...

  5. Nancy之基于Self Hosting的补充小Demo

    前面把Hosting Nancy with ASP.NET.Self Hosting Nancy和Hosting Nancy with OWIN 以demo的形式简单描述了一下. 这篇是为Self H ...

  6. 一个基于ES6&plus;webpack的vue小demo

    上一篇文章<一个基于ES5的vue小demo>我们讲了如何用ES5,vue-router做一个小demo,接下来我们来把它变成基于ES6+webpack的demo. 一.环境搭建及代码转换 ...

  7. 新手 gulp&plus; seajs 小demo

    首先,不说废话,它的介绍和作者就不在多说了,网上一百度一大堆: 我在这里只是来写写我这2天抽空对seajs的了解并爬过的坑,和实现的一个小demo(纯属为了实现,高手请绕道); 一.环境工具及安装 1 ...

  8. Android学习小Demo一个显示行线的自定义EditText

    今天在处理一个EditText的时候,想着把EditText做成像一本作业本上的纸一样,每一行都可以由线条隔开,具体效果如下: 1)最开始的思路 一开始的想法是很简单的,找出每一行的高度,然后一行一行 ...

  9. Android -BLE蓝牙小DEMO

    代码地址如下:http://www.demodashi.com/demo/13890.html 原文地址: https://blog.csdn.net/vnanyesheshou/article/de ...

随机推荐

  1. iOS UIProgressView控件用法

    IOS中进度条控件的用法总结. 进度条控件是IOS开发中一个简单的系统控件,使用总结如下: 初始化一个进度条: - (instancetype)initWithProgressViewStyle:(U ...

  2. Linux运维命令之一

    释放内存:syncecho 3 > /proc/sys/vm/drop_caches Linux查看Dell服务器型号命令:dmidecode | grep "Product Name ...

  3. C&num;中的Invoke

    在用.NET Framework框架的WinForm构建GUI程序界面时,如果要在控件的事件响应函数中改变控件的状态,例如:某个按钮上的文本原先叫“打开”,单击之后按钮上的文本显示“关闭”,初学者往往 ...

  4. ReSharper 8&period;1支持Visual Studio 2013的特色——超强滚动条

    自ReSharper 8.1发布以来,便支持Visual Studio 2013.其中peek功能是它的亮点,滚动条则是它的特色. 接下来小编将展示ReSharper在Visual Studio 20 ...

  5. 进入PE后不显示硬盘的解决办法

    其实我很早之前就知道这个方法了,我虽然不知道原因,不过我是一个一个试出来的,转过来备忘, 内容介绍:经常使用PE的朋友相信都遇到过这样的问题,一些新购买的电脑可以正常把PE系统安装到U盘中,也可以正常 ...

  6. 让我怀疑人生的bug集合

    bug1:一个人人都知道全局变量易污染,但是我就是污染不了的问题 解决:刚开始动用了session来存这个值,后来觉得太小题大做了,最后使用了闭包来解决,第一个function结束后开启第二个,起初没 ...

  7. JS判断当前设备类型

    CSS3出来后,我们一般都是通过@media媒体查询来实现网页自适应,但是有时候,还是需要我们根据不同的设备来对应的做不同的显示,这时候,我们需要知道当前用户访问我们的界面用的是什么设备,怎么获取呢? ...

  8. C&plus;&plus;获取单链表的倒数第k个节点

    /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ c ...

  9. matplotlib--画图时保存图片空白的问题

    问题: 当使用如下代码保存使用 plt.savefig 保存生成的图片时,结果打开生成的图片却是一片空白. import matplotlib.pyplot as plt ""&q ...

  10. 奇怪的分式&vert;2014年蓝桥杯B组题解析第六题-fishers

    奇怪的分式 上小学的时候,小明经常自己发明新算法.一次,老师出的题目是: 1/4 乘以 8/5 小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45 (参见图1.png) 老师刚想批评他,转念 ...