前一篇中,我们简单的讲述了下如何在Linux.NET中部署第一个ASP.NET MVC 5.0的程序。而目前微软已经提出OWIN并致力于发展VNext,接下来系列中,我们将会向OWIN方向转战。

早在三周之前,我偶然的得到了一本《SignalR Programming in Microsoft ASP.NET》,在晚上不工作的时候对这本书进行细细研读(到目前为止大概只研读了一半)。虽然目前只有英文原版,但是这本书讲得很不错,即使需要抱着一本词典来辅助阅读,那也是值得的。

OWIN的发展,不仅对于传统的MS.NET(常规运行于Windows中的.NET)方向的开发是一个新的征程,对于我们Linux.NET方向的开发也同样是一个新的纪元。至于关于OWIN发展所给我们带来的好处,我这里给各位读者随意的列出这么几条:

  (1)、我们写的代码兼容性更高,项目的迁移更可靠(当然前提是你使用的框架是支持OWIN的框架)

  (2)、社区将会更加活跃(由于OWIN具有更开放性,它鼓励了一批人把自己的创意变成现实)

  (3)、Web Server我们有更多的选择,可以使用非IIS挂载自己的站点(当然在Windows下,IIS仍然为一个最佳的选择,不过目前IIS暂时没有支持OWIN,想尝试OWIN的暂时读者只能用Katana,而Linux下的Jexus则已经支持)。

  (4)、更多……

不过,凡事总有两面性,OWIN所带来的除了巨大的好处之外,还带来了一些短期内不好的附加属性,最直接的就是增加了我们的学习成本,我们需要同时学习VNext之前的.NET知识,以及伴随VNext新产生的知识(三五年内这个是必须的)。不过我们目前还有Visual Studio 2014还没有正式的发布,我们还有少许的时间供我们赛跑。等万事已成定局的时候再来努力,那就只能看着其他人的背影了,毕竟“先来的喝汤,迟来的喝水,不来的啥都没得喝”我说得对吧?

咳咳,言归正传,回到本节的主题,本节中我们将讨论学习:

  (1)、在Linux.NET中跑OWIN程序,怎么准备

  (2)、把两个有趣的SignalR Demo部署向Linux.NET中

  (3)、搭个顺风车,NancyFx部署向Linux.NET

本文中的相关代码已经托管GitHub,大家可以点击这里进行下载。


1、我们需要准备些什么

由于OWIN协议提出的时间并没有太久,并且是许多支持OWIN的框架均是基于FrameWork 4.5的,因此为了您的程序成功部署,请使用最新版的Mono(Mono 3.4)作为Linux.NET的运行环境。这里要特别指出注意的一点,关于“Mono 3.4.tar.gz”这个包,官方所提供的安装包其实是缺少组件的,因此如果各位读者采用的是官方包编译那么一般是报Error的,这里我们提供正确的安装包,需要的读者可以点击这里进行下载。

至于Linux中的OwinHost,Jexus已经率先的给予支持,各位读者只需移步到官网中下载版本为5.6以上的Jexus即可,也可以点击这里直接进行下载。

安装方法与之前的一样,需要的读者可以移步到《Linux.NET 学习手记 (1)》查阅。

还有一点需要补充的,本系列的文章中Mono的安装路径均为“/usr/local/mono/” 与很多教程中采用的“/usr/”有所不同,因此如果选择按照本系列教程的读者,请务必确保安装步骤每一步都执行完成且正确。近期中收到了不少的朋友Jexus无法运行,找不到Mono。这些基本是没有设置好环境变量,造成系统扫描目录的时候不扫描Mono的安装目录,继而找不到bin/Mono。宇内流云也给我建议能否将安装目录由“/usr/local/mono”改为“/usr/”,不过我看了下已有文章,发生改动的话影响就很大了(衷心感觉到写文章就像写项目一样,文章多了项目也变大,改一个基类所有派生的子类都遭殃了),所以就压着没有改,各位读者要千万的留意(当然,我目录的选择也是有故事的,有兴趣的读者可以留言,我可以分享出来)。

我们一直采用的开发模式是Windows中开发,Linux中运行,OWIN中也不例外。Windows中使用Katana作为Host,发布之后采用Jexus作为Host运行。需要了解Katana安装使用的读者,也可移步到《如何安装并简单的使用OwinHost——Katana》

2、部署两个有趣的SignalR程序到Linux.NET中

SignalR框架作为支持OWIN协议的框架,自然是可以通过挂载到OwinHost的方式部署到Linux.NET中了。在本示例代码中,里面有两个基于SignalR的Demo,具体这个Demo是怎么做出来的我在这里就不作讲解了,希望以后有机会单独出一个SignalR的学习系列(待我觉得对SignalR无惑之时),到时再针对SignalR作出详细的讲解,现在就不误导各位读者了。

我们拿到代码之后,用Visual Studio打开它,先讲解如何部署Demo1,Demo1是一个简易的在线聊天室。

首先,我们先在Jexus中新建一个网站配置文件:

然后在里面写上配置(当然,推荐直接拷贝出新的一份default,然后直接改里面的参数),在最后的一行中加上以下的这条语句:

OwinMain=Jws.OwinAdapter.MsOwin.dll,Jws.OwinAdapter.MsOwin.Adapter

这句话的作用是通知并让Jexus支持OWIN(我称它为OWIN模式)。

然后把我们的Demo向Linux中发布:

打开bin目录,在bin中添加上Jexus针对OWIN的通用适配器(相关组件可以点击这里进行下载,源码则可以点击这里下载)

找到“Microsoft.AspNet.SignalR.Owin.dll”,把后缀改了或者直接删除(如图所示)

最后再重启下Jexus,然后我们就可以用浏览器访问了(网址如图,高清大图来的)。

挺有趣的哈~!

至于Demo2,部署方式跟Demo1一致,部署成功之后的效果如下(网址也在图中):

图中的那个Guid框会跟着鼠标走,并且鼠标经过任意的浏览器,其余浏览器均会同步这个Guid的位置,挺有趣好玩的。

这里提示一下:

  (1)、重新部署之后记得重启Jexus

  (2)、这个Demo可能会令CPU飙升,特别是虚拟机中。

3、给NancyFX搭个顺风车

可能有个别的读者懂得怎么使用NancyFX,并且也可能手上有一些基于NancyFX框架的站点。NancyFX跟SignalR一样,同样支持OWIN协议,因此也是可以随时从Windos中向Linux中部署的。事实上,部署NancyFX可说是只是动动手指头的事情(没有用到些“特别”的组件、代码也按照标准的情况下),相比于SignalR简单多了(前面两个Demo中SignalR当时是部署不成功的,后来和宇内流云一同在调呀调呀才调试完毕,这里感谢他的技术支持)。

虽然我本人并没有使用NancyFX的习惯,不过也顺带让NancyFX搭个顺风车,讲讲它怎么部署。

示例代码中,ExtraDemo是基于NancyFX做出来的Demo,我们可以把它部署到项目文件之后,直接向Linux中发布

然后添加上Jexus的适配器:

重启Jexus,即可完成NancyFX的部署。访问页面:


目前,支持OWIN协议的框架除了文中提及的两个以外,还有其他存在,由于能力有限,那些框架我暂时也没有尝试使用过,有兴趣的读者可以自行尝试,当然也欢迎您将您的心得体会与我们一同分享。

下一篇中,我们将分析OwinHost与OWIN的框架到底是怎么“沟通”的,它又是怎么“驱动”OWIN框架的。下回见。

Linux.NET学习手记(7)的更多相关文章

  1. Linux.NET学习手记(8)

    上一回合中,我们讲解了Linux.NET面对OWIN需要做出的准备,以及介绍了如何将两个支持OWIN协议的框架:SignalR以及NancyFX以OwinHost的方式部署到Linux.NET当中.这 ...

  2. 关于《Linux.NET学习手记(8)》的补充说明

    早前的一两天<Linux.NET学习手记(8)>发布了,这一篇主要是讲述OWIN框架与OwinHost之间如何根据OWIN协议进行通信构成一套完整的系统.文中我们还直接学习如何直接操作OW ...

  3. Linux.NET学习手记(6)

    各位读者大家好,好长一段时间没有更新文章了,自从参加工作之后,每天等待去做的工作没完没了,个人的时间也变得奢侈起来,今后要尽量从中脱身,抽更多的时间来完成自己想做的事情(希望如此). 言归正传,上一回 ...

  4. Linux.NET实战手记—自己动手改泥鳅(上)

    各位读者大家好,不知各位读者有否阅读在下的前一个系列<Linux.NET 学习手记>,在前一个系列中,我们从Linux中Mono的编译安装开始,到Jexus服务器的介绍,以及如何在Linu ...

  5. Linux LVM学习总结——扩展卷组VG

    Linux服务器由于应用变更或需求的缘故,有可能出现分区空间不足的情况,此时往往需要进行扩容(要增加分区的空间),而采用LVM的好处就是可以在不需停机的情况下可以方便地调整各个分区大小.如下所示,分区 ...

  6. linux的学习记录随笔

    为什么学习linux 因为操作系统是一种介质,你要接触其中的东西,首先必须要有介质,而linux在服务器端是老大哥的地位,所以呢,学习linux吧. 学习的方式 可以看视频 imooc.百度传课.网易 ...

  7. Linux LVM学习总结——创建卷组VG

    在Linux平台如何创建一个卷组(VG)呢?下面简单介绍一下卷组(VG)的创建步骤.本文实验平台为Red Hat Enterprise Linux Server release 6.6 (Santia ...

  8. 别出心裁的Linux命令学习法

    别出心裁的Linux命令学习法 操作系统操作系统为你完成所有"硬件相关.应用无关"的工作,以给你方便.效率.安全.操作系统的功能我总结为两点:管家婆和服务生: 管家婆:通过进程.虚 ...

  9. EF框架学习手记

    转载: [ASP.NET MVC]: - EF框架学习手记 1.EF(Entity Framework)实体框架EF是ADO.NET中的一组支持开发面向数据的软件应用程序的技术,是微软的一个ORM框架 ...

随机推荐

  1. 说说Makefile那些事儿

    说说Makefile那些事儿 |扬说|透过现象看本质 工作至今,一直对Makefile半知半解.突然某天幡然醒悟,觉得此举极为不妥,只得洗心革面从头学来,以前许多不明觉厉之处顿时茅塞顿开,想想好记性不 ...

  2. 探索ASP.NET MVC5系列之~~~3.视图篇(下)---包含常用表单和暴力解猜防御

    其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正) 汇总:http://www.cnblogs.com/dunitian/p/4822808.ht ...

  3. .Net Core MVC 网站开发(Ninesky) 2.3、项目架构调整-控制反转和依赖注入的使用

    再次调整项目架构是因为和群友dezhou的一次聊天,我原来的想法是项目尽量做简单点别搞太复杂了,仅使用了DbContext的注入,其他的也没有写接口耦合度很高.和dezhou聊过之后我仔细考虑了一下, ...

  4. 算法与数据结构(七) AOV网的拓扑排序

    今天博客的内容依然与图有关,今天博客的主题是关于拓扑排序的.拓扑排序是基于AOV网的,关于AOV网的概念,我想引用下方这句话来介绍: AOV网:在现代化管理中,人们常用有向图来描述和分析一项工程的计划 ...

  5. 破解SQLServer for Linux预览版的3.5GB内存限制 (RHEL篇)

    微软发布了SQLServer for Linux,但是安装竟然需要3.5GB内存,这让大部分云主机用户都没办法尝试这个新东西 这篇我将讲解如何破解这个内存限制 要看关键的可以直接跳到第6步,只需要替换 ...

  6. PHP好用但又容易忽略的小知识

    1.PHP函数之判断函数是否存在 当我们创建了自定义函数,并且了解了可变函数的用法,为了确保程序调用的函数是存在的,经常会先使用function_exists判断一下函数是否存在.同样的method_ ...

  7. MongoDB备份(mongodump)和恢复(mongorestore)

    MongoDB提供了备份和恢复的功能,分别是MongoDB下载目录下的mongodump.exe和mongorestore.exe文件 1.备份数据使用下面的命令: >mongodump -h ...

  8. Struts2框架基础

    Struts2框架基础 1.Java的框架 1.1.框架简介 在大型项目开发过程中,经常会使用到一些框架,这样做好的好处是能够提高工作效率,在java中最常用的的框架就是SSH,这其实是三个框架的简称 ...

  9. BRDF 光照模型

    http://blog.csdn.net/liu_lin_xm/article/details/4846144

  10. Xamarin.Android之ContentProvider

    一.前言 掌握了如何使用SQLiteOpenHelper之后,我们就可以进行下一步的学习.本章我们将会学习如何使用ContentProvider来将数据库方面的操作封装起来,同时它还可以供其他应用访问 ...