就在最近一段时间,“Visual Studio 2015 CTP 5”(以下简称CTP5)发布了,CTP5的发布不仅标志着新一代的VisualStudio正式发布又向前迈出了一步,还标志着距离ASP.NET5(vNext)的正式发布不远。跟随者CTP5,KRE也从Kre beta-1.0升级到了Kre beta-2.0。

与众多.NET开发者一样,我们也一直在密切的关注ASP.NET5的发展,而作为领先的Linux.NET WebServer服务器更是如此,早在Kre beta-2.0发布前后,Jexus已经以“内部”的方式发布了相应的“适配器(Adapter)”,通过这些适配器,我们可以比较容易的在Linux上运行ASP.NET5的程序。相信在不久的将来,随着ASP.NET5的正式发布,正式版Jexus For ASP.NET5 Adapter也会在第一时间进行发布。

言归正传,上回我们发布了《再探ASP.NET5》,对ASP.NET5的构架进行了初步的探讨,在本篇内容中,我们将正如标题所说的那样,我们将介绍如何在Linux.NET中部署ASP.NET5程序,相关的组件,可以到“OWIN群(Q群号:373470340)”或者本文Demo(点击这里进行下载)中获得。本文的操作是基于ASP.NET5 Beta1/2进行操作,如若ASP.NET5正式版有巨大改动,请以正式版为准。本实验对网络环境要求较高,请各位读者确保机器网络环境通畅且没有被任何物质阻挡。

正式进入主题,本节中我们将介绍:

1、搭建ASP.NET5运行环境

2、如何向Linux.NET部署ASP.NET5程序

3、Jexus Host ASP.NET5的技术内幕

本文demo,各位读者可以点击这里进行下载。


一、搭建ASP.NET5运行环境

所谓工欲善其事必先利其器,需要运行ASP.NET5程序,必须先要有ASP.NET5的运行环境。ASP.NET5的运行环境除了要有常规的Linux.NET运行环境外,还额外需要一个KRuntime的环境。关于常规环境这一块这里就不作细说,不懂的读者可以翻阅《Linux.NET学习手记(1)》进行搭建,注意:这里的Mono版本需求为3.4.1以上,当前最新版本为3.12,各位读者可以到官网下载并编译安装,也可以更简便直接的使用JWS.OWIN进行常规环境的快速搭建。

首先,我们要逐条执行以下语句给Linux安装相关证书:

certmgr -ssl -m https://go.microsoft.com

certmgr -ssl -m https://nugetgallery.blob.core.windows.net

certmgr -ssl -m https://nuget.org

certmgr -ssl -m https://www.myget.org

每条语句执行之后都会询问是否安装,输入几次的“yes”并回车确认即可。然后再执行以下语句让证书马上生效。

mozroots --import --sync

执行以下语句进行KRuntime的安装:

curl -sSL https://raw.githubusercontent.com/aspnet/Home/master/kvminstall.sh | sh && source ~/.kre/kvm/kvm.sh

安装完成之后可以执行“kvm llist”列出已经安装了的KRE版本。

如果显示的不是beta2版本,而是beta1版本,各位读者可以通过执行”kvm upgrade“进行升级。

至此,我们就拥有了一个供ASP.NET5的运行环境。

二、如何部署ASP.NET5程序到Linux.NET中

首先,我们需要创建一个ASP.NET5的程序,用VS15PrewView或者CTP5随你喜欢,并写上简单的代码确保能够运行。

然后发布到本地目录。

对ASP.NET5有所了解的读者对这玩意绝对不陌生,我们等下需要部署里面的东西。镜头先转到Linux中,我们进行Linux的配置。

我们先对Jexus中的SiteConfig进行配置,配置好相关的端口、地址,并添加"OwinMain=Jws.OwinAdapter.Next.dll,Jws.OwinAdapter.Next.Adapter"这行。

把刚才发布的项目中的源码路径(/approot/src/Demo1)中的内容全部上传到Linux.NET的网站根目录中。

把webroot中的静态资源也上传到根目录中(bin/和web.config就不要了)。

在根目录创建一个bin文件夹,并把Jexus的ASP.NET5适配器上传到bin目录中(“Jws.OwinAdapter.Next.dll”和“k.config”).

得到的效果入下图所示:

接下来就是重头戏了,使用vi打开“project.json”:

除了“dependencies”节点其他的全部删除,“dependencies”里面的内容也清空。

在“dependencies”节点中添加“"Microsoft.AspNet.Mvc": "6.0.0-*"”。

完成后效果如下图:

保存退出。最后在根目录执行:

kpm restore

ASP.NET5会自动的到所有的NuGetServer下载并解决相关依赖,类似于Yum(对网络要求高)。

执行完成之后,启动Jexus即可。

访问我们的页面,页面被成功的访问了。

三、Adapter技术内幕

通过上述操作,我们的ASP.NET5已经成功的在Jexus上跑起,相信不少读者也已经发现,在Jexus上运行ASP.NET5跟在VS中发布的默认方式是有所不同的,使用Jexus的方式与当前的ASP.NET MVC 1-5更接近。

Jexus和ASP.NET5的“通讯”方式正如上图所示。而事实上,通过一些的项目证实Jexus已经作为成熟的工业级WebServer,它已经和MSOWIN相关框架达至无缝连接的水平,使用Jexus的“OWIN模式”输出的是标准的OWIN字典,而ASP.NET5虽然与OWIN长得类似,但两者是截然不同的东西。适配器的作用就是把OWIN Environment中的数据包装成能直接提供ASP.NET5使用的模式以便于ASP.NET5 Application的正常运行。

此外,这里还有一些技术内幕。其一就是在Jexus中使用ASP.NET5是无需使用静态组件的(StaticFile组件),Jexus充分发挥自身强大的静态处理能力等优势(静态资源的吞吐能力、安全性、并发处理能力、心跳检测等)将尽量多的静态请求放入到自身进行处理,一些静态资源譬如图片、音频、小文件之类的Jexus是不会再调用Kre使用ASP.NET5框架进行处理,也无需再走ASP.NET5的Pipe。这大幅度的不仅大幅度的提升了网站的效率,同时也弥补了直接使用ASP.NET5 SelfHost所带来的众多短板(不间断运行、多线程、安全性等)。

还有一点内幕,那就是Jexus对ASP.NET5的激活方式。相信各位读者也知道,ASP.NET5的类库采用了独特的ASP.NET5 Library,目前它是与现有的程序集是互不兼容的,也暂时没有比较好的方式去处理新旧类库的关系,而Jexus对ASP.NET5的激活方式或许能够给出一条解决的道路。Adapter是通过Assembly.Load的方式激活其内嵌的DLL,继而激活并与ASP.NET5的程序进行通讯,Jexus自身成为了ASP.NET5Library与程序集之间的“中转站”,因而Jexus既使用了ASP.NET5的类库又最大限度的保障了普通类库的兼容,真正做到鱼与熊掌兼得。


好的,本节内容就到这里,有疑问或建议的读者可以到OWIN群里与我或其他大牛取得联系。需要OWIN/Jws.Mono技术支援的也可以到此群。感谢宇内大大对本篇进行技术校对,以及群里朋友借来的国外服务器。谢谢~!

此文在个人博客对应地址:http://jhonge.net/Home/Single2/1700

(如果您觉得这篇文章写得好或者有用请点个赞)

让ASP.NET5在Jexus上飞呀飞的更多相关文章

  1. ASP.NET5,MVC 6,Beta 7与VS 2015 RTM的兼容问题

    温馨提示:本文杂而乱,最终不知所云. Visual Studio 2015 RTM已经于2015年7月20号正式发布,我也在第一时间下载安装了起来. 虽然在5月份就开始使用RC版本,但是还是很期待正式 ...

  2. ASP.NET5 Beta8可用性

    ASP.NET5 beta8现已上都的NuGet作为一个工具升级到Visual Studio2015!此版本极大地扩展.NET核心对OS X和Linux所支持的范围.您现在可以使用网络,加密和全球化特 ...

  3. ASP.NET5 Beta8

    ASP.NET5 Beta8 ASP.NET5 beta8现已上都的NuGet作为一个工具升级到Visual Studio2015!此版本极大地扩展.NET核心对OS X和Linux所支持的范围.您现 ...

  4. 为支持ASP.NET5跨平台,Jexus再添新举措

    Jexus作为一款运行于Linux/FreeBSD平台上,以支持ASP.NET著称的高性能HTTP服务器和反向代理服务器,继5.6版完成对OWIN标准应用的支持后,就把着力点放到了对ASP.NET5的 ...

  5. IIS 上发布ASP.NET5

    原文 http://docs.asp.net/en/latest/publishing/iis.html 1.安装HTTP Platform Handler ,这个是必需的,不然无法通过IIS访问AS ...

  6. 让 ASP.NET vNext 在 Mac OS 中飞呀飞。。。

    写在前面 阅读目录: 娓娓道来 Install ASP.NET vNext Command Line Tools 安装 Homebrew 使用 Homebrew,安装 KVM Install Subl ...

  7. 从ASP.NET 升级到ASP.NET5(RC1) - 翻译

    前言 ASP.NET 5 是一次令人惊叹的对于ASP.NET的创新革命. 他将构建目标瞄准了 .NET Core CLR, 同时ASP.NET又是对于云服务进行优化,并且是跨平台的框架.很多文章已经称 ...

  8. ASP.NET5 中静态文件的各种使用方式

    所谓静态文件,包含HTML文件,css文件.图片文件和js文件等,他们是服务器直接读取到客户端的一些资源,在这篇文章中,我们将解释关于ASP.NET5和静态文件的一些内容. 服务端的静态文件 默认情况 ...

  9. ASP.NET5配置

    ASP.NET5支持各种各样的配置,应用程序配置数据可以来自JSON, XML或者INI格式的文件,也能来自环境变量,你也可以自定义你自己的Configuration Provider. 1. 获取和 ...

随机推荐

  1. ExtJS 4.2 评分组件

    上一文章是扩展ExtJS自带的Date组件.在这里将创建一个评分组件. 目录 1. 介绍 2. 示例 3. 资源下载 1. 介绍 代码参考的是 Sencha Touch 2上的一个RatingStar ...

  2. 使用Visual Studio 2015 开发ASP.NET MVC 5 项目部署到Mono/Jexus

    最新的Mono 4.4已经支持运行asp.net mvc5项目,有的同学听了这句话就兴高采烈的拿起Visual Studio 2015创建了一个mvc 5的项目,然后部署到Mono上,浏览下发现一堆错 ...

  3. MSDN文档篇

    很多人网上下载3~10G不等的MSDN文档,发现,下载完成了不会用 很多人每次都得在线下载文档,手上万千PC,都重新下载不是得疯了? so==> 先看几张图 推荐一个工具:https://vsh ...

  4. CSS 选择器及各样式引用方式

    Css :层叠样式表 (Cascading Style Sheets),定义了如何显示HTML元素. 目录 1. 选择器的分类:介绍ID.class.元素名称.符合.层次.伪类.属性选择器. 2. 样 ...

  5. JavaScript 自定义对象

    在Js中,除了Array.Date.Number等内置对象外,开发者可以通过Js代码创建自己的对象. 目录 1. 对象特性:描述对象的特性 2. 创建对象方式:对象直接量.new 构造函数.Objec ...

  6. 谱聚类(spectral clustering)原理总结

    谱聚类(spectral clustering)是广泛使用的聚类算法,比起传统的K-Means算法,谱聚类对数据分布的适应性更强,聚类效果也很优秀,同时聚类的计算量也小很多,更加难能可贵的是实现起来也 ...

  7. 为IEnumerable<T>添加RemoveAll<IEnumerable<T>>扩展方法--高性能篇

    最近写代码,遇到一个问题,微软基于List<T>自带的方法是public bool Remove(T item);,可是有时候我们可能会用到诸如RemoveAll<IEnumerab ...

  8. Web安全相关(三):开放重定向(Open Redirection)

    简介 那些通过请求(如查询字符串和表单数据)指定重定向URL的Web程序可能会被篡改,而把用户重定向到外部的恶意URL.这种篡改就被称为开发重定向攻击.   场景分析 假设有一个正规网站http:// ...

  9. Java实现Excel中的NORMSDIST函数和NORMSINV函数

    由于工作中需要将Excel中的此两种函数转换成java函数,从而计算内部评级的资本占用率和资本占用金额.经过多方查阅资料和整理,总结出如下两个转换方法 标准正态分布累计函数NORMSDIST: pub ...

  10. Angular (SPA) WebPack模块化打包、按需加载解决方案完整实现

    文艺小说-?2F,言情小说-?3F,武侠小说-?9F long long ago time-1-1:A 使用工具,long long A ago time-1-2:A 使用分类工具,long long ...