Linux.NET学习手记(7)
前一篇中,我们简单的讲述了下如何在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框架的。下回见。