前面做了基于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处理

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     }

这里我们就显示一下文字,后面部署会用之前的MovieDemo来完成。

ok,看看效果!

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

注:1)、由于演示这里用的 Microsoft.Owin.Host.SystemWeb是3.0.1版本的所以不需要做额外的处理,

    如果您的版本是1.x的话,请在web.config中添加如下配置

1 <appSettings>
2     <add key="owin:HandleAllRequests" value="true"/>
3 </appSettings>

    在新版本中简化了我们的操作,可见还是很贴心的 O(∩_∩)O

   2)、如果您需要用到除了Get、Post之外的方法(Put、Head、Delete)还需要在system.webServer节点做相应的修改

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>

五、多种运行调试方法,任君选择

到这里,我们可以发现,我们运行和调试还是借助的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即可!)

 1 /**************************************************************************************
 2  *  ===              通过Microsoft.Owin.dll运行Nancy的应用示例                   ===
 3  * ==================================================================================
 4  * 目的:
 5  *   演示如果将 NancyFx 加入到 Microsoft.Owin 的处理环节中,然后利用Nancy建立web应用。
 6  * 使用方法:
 7  *   将编译得到的dll连同Owin.dll、Microsoft.Owin.dll、Nancy.dll、Nancy.Owin.dll等文件
 8  *   一并放置到网站的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     /// 针对Microsoft.Owin的JWS开放接口适配器
29     /// <para>本接口适合兼容Microsoft.Owin规范的应用</para>
30     /// </summary>
31     class Adapter
32     {
33         static Func<IDictionary<string, object>, Task> _owinApp;
34
35         /// <summary>
36         /// 默认构造函数
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所需要的关键函数 ***
50         /// <para>每个请求到来,JWS都会把请求打包成字典,调用这个函数</para>
51         /// </summary>
52         /// <param name="env">新请求的环境字典,具体内容参见OWIN标准</param>
53         /// <returns>返回一个正在运行或已经完成的任务</returns>
54         public Task OwinMain(IDictionary<string, object> env)
55         {
56             //如果为空
57             if (_owinApp == null) return null;
58
59             //将请求交给Microsoft.Owin处理
60             return _owinApp(env);
61         }
62
63
64     } //end class
65
66
67 } //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

然后进入 tinyfox的目录 cd /usr/tinyfox-2.3
执行./fox.sh -root ar/www/owinnancy -p 8181 
已经启动成功了,下面就是访问看看OK否。打开浏览器访问这个demo试试。顺便放上几张图看看效果。 

几点必要的说明
1、宇内大大在ReadMe.txt中是这样描述的(我只截取了部分内容)
  问:网站文件放哪儿?
      答:在TinyFox所在文件夹下的有一个名叫“site”的文件夹,这个文件夹中包括两个子目录,一个是wwwroot,
      用户存放传统的网站文件或静态文件,另一个是approot,用于存放用户的程序集及其相关依赖的dll,当然,
     dll文件也可以存放在wwwroot下的bin文件夹中;
  问:如果我的网站文件夹不在tinyfox默认的位置,怎么设定?
    答:在TinyFox.exe 后边加上一个形如“-root 路径”这样的参数,如:“tinyfox -root d:\mysite\wwwroot”
   由于习惯问题,我是将网站放在 /var/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
基本是保持默认的配置。具体的配置如下:
然后重启我们的网站 /usr/jexus/./jws restart owinnancy
重启OK!访问试试
成功了!!
另外还要说一句,如果没有加至关重要的那一句,访问就是一片空白!
最后是部署所用的MovieDemo,其实跟之前的没多少差别。
下载地址:
https://github.com/hwqdt/Demos/tree/master/NancyDemoWithOwin/MovieDemoWithOwin
下一篇将会是对 Self Hosing 的一点点补充,敬请期待。

转载于:https://www.cnblogs.com/catcher1994/p/5154913.html

Nancy之基于Nancy.Owin的小Demo相关推荐

  1. Nancy之基于Nancy.Hosting.Aspnet的小Demo

    Nancy之基于Nancy.Hosting.Aspnet的小Demo 原文:Nancy之基于Nancy.Hosting.Aspnet的小Demo 近来学习了一下Nancy这个框架,感觉挺好用的,就写篇 ...

  2. nancy 显示html网页,Nancy之基于Nancy.Hosting.Self的小Demo_html/css_WEB-ITnose

    今天来做个基于Nancy.Hosting.Self的小Demo. 关于Self Hosting Nancy,官方文档的介绍如下 https://github.com/NancyFx/Nancy/wik ...

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

    原文:Nancy之基于Self Hosting的补充小Demo 前面把Hosting Nancy with ASP.NET.Self Hosting Nancy和Hosting Nancy with ...

  4. 基于JQuery做的一个简单的点击显示和隐藏的小Demo

    最近新加入了一个公司,并接手到了一个新项目,是基于 Spring + Spring MVC + MyBatis 架构来搭建的,在公司领导的需求下修改功能,需要修改些修改些前端页面,原本很简单的就是一个 ...

  5. 基于 openGauss 的五子棋 AI 项目,openGauss 设计一个 AI 小 demo

    目录 1 前言 2 方案意义 3 架构设计 4 数据表设计 5 代码结构 6 项目演示 7 总结 1 前言 openGauss 是一款全面友好开放的企业级开源关系型数据库.openGauss 采用木兰 ...

  6. 基于Pycharm的Django学习 —— 用户管理小demo

    自从学了Django之后,我可真粉了银角大王武沛齐,怎么说呢,还挺感慨,好好学习就对了. 学以致用,学以致用,学了Django中的ORM,怎么能够不写一个小案例呢? 基于Pycharm的Django学 ...

  7. 基于QGraphicsView、QGraphicsScene、自定义QGraphicsItem的小demo(正矩形、旋转矩形及圆形)

    网上有很多关于这三个的资料,这方面的功能不做过多的描述,仅仅将在做小Demo过程中遇到的问题做下记录,下面是Demo的界面图: Demo的初衷是不想每次使用QGraphicsView和QGraphic ...

  8. 入门Leaflet之小Demo

    入门 Leaflet 之小 Demo 写在前面 ---- WebGIS 开发基础之 Leaflet GIS 基本概念:GIS.Map.Layer.Feature.Geometry.Symbol.Dat ...

  9. java一键保存表格增删改,一个增删改功能的表格小demo

    项目中遇到的一个小功能,原来的开发的写法可能有点冗余了,扩展性不高,又出了点小bug,特此回来自己写个类似的小demo,遇到的一些问题记录一下. 大概这样 一个操作保留在本地的一个小表格(简化样式了) ...

最新文章

  1. 在VMware Workstation上安装Ubuntu 16.04 Server操作系统
  2. python凹多边形分割_使用Opencv python从Image中裁剪凹面多边形
  3. java读取XML文件的四种方式
  4. SpringBoot 缓存之 @Cacheable 详细介绍
  5. Boost:自定义静态向量
  6. 基于HTML5技术的电力3D监控应用(三)
  7. mysql 导出表数据到另一张表_yz-Mysql数据库中一个表中的数据导出来到另外一个数据库的表格...
  8. 依赖注入在 dotnet core 中实现与使用:2 使用 Extensions DependencyInjection
  9. Android 向服务器发送XML数据及调用webservice
  10. 窗体间跳转及传值 01
  11. C语言给定3x3矩阵旋转输出
  12. python 三目运算符
  13. .Net 3.0 项目与.Net4.0项目之间互相引用的问题.
  14. Arduino uno LED灯实验
  15. C语言 实验六 函数
  16. 简约学术毕业论文答辩PPT模板
  17. 大家注意了,猪八戒网上有个骗子
  18. gn、ninja的安装-Ubuntu18.04
  19. Activity启动过程详解(Android P)
  20. swift Locale

热门文章

  1. C/C++:Windows编程—IAT Hook实例(程序启动拦截)
  2. oracle 导入导出指定表
  3. 软件工程实践2017结对第二次作业
  4. Java_基础—try...catch的方式处理异常1
  5. 自定义JPA之AttributeConverter
  6. 防止NSTimer和调用对象之间的循环引用
  7. 翻译预告 《介绍 GENEVA Beta 1 白皮书》
  8. 每次Title显示不同的名言
  9. 不使用第三个变量交换两个变量
  10. Windows 11 高门槛吓退用户,Linux 成香饽饽?