就在最近一段时间,“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

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

转载于:https://www.cnblogs.com/xiaodiejinghong/p/4266050.html

让ASP.NET5在Jexus上飞呀飞相关推荐

  1. Cactus在jexus上安装

    Cactus基于之前简单后台管理的改良版本,完善了权限管理,为后续的扩展和管理做了铺垫. 完全开放代码,可供学习交流 目前采用MVC4+Autofac+Dapper制作而成,集成一个简单的Blog和权 ...

  2. mono mysql jexus,Linux +MySQL+mono +Jexus 上使用MySQL的简单总结 - Linux DotNET程序员大本营...

    最近准备把PDF.NET框架的开源项目"超市管理系统"移植到Jexus上跑(演示地址:http://221.123.142.196),使用MySQL数据库,相对使用SQLite而言 ...

  3. 让asp.net默认的上传组件支持进度条反映(转)

    对于web下的上传,实际上更多的时候不用上传太大东西,asp.net默认的上传组件足够用了,美中不足就是没有上传进度反映,所以现在要做的就是在asp.net默认的上传基础上加上进度反映. 关于web上 ...

  4. ASP.NET在IIS上部署使用Oracle数据库无法连接数据库解决方法

    ASP.NET在IIS上部署使用Oracle数据库无法连接数据库解决方法(转载) 10小时前 ASP.NET在IIS上部署使用Oracle数据库无法连接数据库解决方法(转载) 分类: ASP.NET| ...

  5. ASP.NET跨服务器上传文件的相关解决方案

    ASP.NET跨服务器上传文件的相关解决方案 参考文章: (1)ASP.NET跨服务器上传文件的相关解决方案 (2)https://www.cnblogs.com/zuowj/p/3999798.ht ...

  6. asp.net实现ftp上传代码(解决大文件上传问题)

    asp.net实现ftp上传代码(解决大文件上传问题) 参考文章: (1)asp.net实现ftp上传代码(解决大文件上传问题) (2)https://www.cnblogs.com/LYunF/ar ...

  7. asp.net core mvc上传大文件解决方案

    asp.net core mvc上传大文件解决方案 参考文章: (1)asp.net core mvc上传大文件解决方案 (2)https://www.cnblogs.com/eggtwo/p/988 ...

  8. ASP.NET中文件上传下载方法集合

    asp.net 2008-08-23 21:10:35 阅读0 评论0   字号:大中小 订阅 ASP.NET中文件上传下载方法集合 文件的上传下载是我们在实际项目开发过程中经常需要用到的技术,这里给 ...

  9. [转载]ASP.NET Core文件上传与下载(多种上传方式)

    ASP.NET Core文件上传与下载(多种上传方式) 前言 前段时间项目上线,实在太忙,最近终于开始可以研究研究ASP.NET Core了. 打算写个系列,但是还没想好目录,今天先来一篇,后面在整理 ...

最新文章

  1. php 上传图片并生成缩略图,php 图片上传并生成缩略图代码
  2. SQLServer中Case的用法
  3. Web前端进阶之JavaScript模块化编程知识
  4. 玩转ECS第8讲 | 服务器迁移中心SMC最佳实践及新特性介绍
  5. SAP UI5 应用开发教程之五:视图控制器初探
  6. Python easy_install
  7. 【精】C语言之变量存储类型
  8. 2019.08.27BOM的六个子对象(1)
  9. 需要压缩NTFS盘的情况有哪些?
  10. CentOs安装pyhive
  11. 常见的十大量化投资策略(附源码)
  12. SIM868获取LBS位置
  13. System V消息队列报Resource temporarily unavailable 错误
  14. winXp 共享打印问题处理方法(终极版)
  15. python实现颜色RGB转换颜色16进制
  16. 云存储字体测试(字体链接7小时有效)
  17. 10min快速回顾C++语法(五)字符串专题
  18. 计算机微格教学心得体会,微格教学心得体会6篇.doc
  19. 寒假日报(1.18)
  20. 毕业设计 基于树莓派的智能家庭监控系统

热门文章

  1. c++开发中,调试排查问题总结
  2. 基于Redis的分布式锁实现
  3. C语言再学习 -- 存储类、链接
  4. hdu-2066(Dijkstra)
  5. 大数运算(7)——大数阶乘(求阶乘)
  6. php银行转账,php+mysqli事务控制实现银行转账实例_PHP教程
  7. hsf 架构_java分布服务:我打赌,没人可以这么精短的讲出分布服务架构吧
  8. python重复字符串n次_python装饰器听了N次也没印象,读完这篇你就懂了
  9. android activity使用,android,NativeActivity使用
  10. vs2015 linux jni,使用Visual C++ 跨平台移动技术调试JNI Android 应用程序