Linux下ASP.NET初尝试之Jexus使用

国产化进程一直在推进,以前Windows系列的开发部署模式,也要有所改动了。

.NET Core也退出来了,奈何不支持WebForm啊,只能是MVC。

于是需要找到一种可以在Linux下运行ASP.NET的方式。

跟度娘聊了会儿,说到了今天的主角Jexus。

目录

Jexus闪亮登场

Jexus安装、启动

Jexus网站配置

1、提示dll不存在,加载文件失败

2、继续访问,提示不存在xx.Global

3、继续,连接数据库错误

4、缺少动态加载dll

设置外部访问

已知、未知的问题

补充

后记


  • Jexus闪亮登场

Jexus以支持ASP.NET、Core、php在Linux上运行为特色,能够支持ASP.NET的原理,就是在Linux上安装了Mono(跨平台.NET运行环境),进而支持ASP.NET程序的运行。

官网:https://www.jexus.org/

独立版(专业版)自带Mono环境,省去了自己在Linux上安装Mono的繁杂步骤,安装独立版的Jexus很简单,一个命令就搞定了。这里再插一句,要搞这些操作,首先你需要一个Linux环境,我是用VMWare做的CentOS 7.0的虚机Linux系统。可以从阿里云的镜像服务器直接下载相应的ISO文件,然后就可以做虚机了。

以下是官网首页的说明:

Jexus独立版(专业版)的安装

Jexus“独立版”指的是自带.net运行时(mono),不需要在客户服务器安装mono就能正常运行的Jexus版本,该版本只支持 64位Linux操作系统。

  • Jexus安装、启动

安装jexus独立版的命令是:

curl https://jexus.org/release/x64/install.sh|sudo sh

注:运行安装命令,需要操作者有root权限。

安装几分钟就搞定了。

默认安装在/usr/Jexus下

命令行:首先cd到Jexus目录下

然后:./jws start

即可启动服务。

也可以设置为自动启动,一开始我是问的度娘,给的方法也可以实现,就是比较麻烦些,见:https://blog.csdn.net/fwj380891124/article/details/52587861

问了下Linux专业交流群(值得加入的收费群,后面几个问题都是群里大神帮助解决的),有简单方法:

在/etc/rc.local 中,添加一行: /usr/jexus/jws start

意思差不多,都是在系统启动的时候,可以直接Jexus的启动Start

启动后,其实就可以访问了:http://localhost/info

  • Jexus网站配置

接下来就是配置自己的网站了。

在Jexus安装目录/usr/Jexus下,有个jsw.conf文件定义了Jexus的基本配置信息,可以不用管

再有个文件夹siteconf,这个是关键,所有的网站配置信息都在这里了,默认有个default,可以设置网站程序的端口、路径、主机名的。详细的说明官网都有的。

默认的网站程序文件放在/var/www下,一个网站再新建一个子文件夹(注意这个www是自己手动新建的,默认没有的)

注意:修改了上述siteconf下的网站配置文件后,重启jexus才会生效(restart)

正常,这么配置以后就可以正常访问我们的系统,看到熟悉的界面了。

不过我在搞的时候遇到了几个问题,正好在这里说下。

1、提示dll不存在,加载文件失败

根据错误提示,应该是在web.config中注册了这个提示错误的dll,一开始我是从我的win10电脑拷贝到bin下还是报错,拷贝到mono下的目录也不行,不知这家伙的运行原理;

解决:看了下,应该这个dll其他地方也没调用,直接web.config直接去掉,这个问题是过去了

2、继续访问,提示不存在xx.Global

这个就是程序下的Global.asax页面,存在的啊

这里想不明白,于是消费¥5进了Jexus交流群(官网可以看到群号),错误贴出来后,大佬一针见血发现问题所在:

由于我们的程序之前在IIS下都是部署到网站下的应用程序,所以我在拷贝代码的时候,是把我的代码根目录拷贝到了default下,即:default/mysite下才是我的实际程序文件(bin、页面这些的)

正是由于这个,导致找相关文件的时候出错了,还好也可以按照IIS网站下应用程序方式配置,见下:

默认是没有mySite这一级的,该问题也被灭。

3、继续,连接数据库错误

程序连接的数据库在我的Win10上,ping是通的,但是搞不懂为啥访问不到。

一开始是按照机器名\实例名方式,后来改为IP\实例名都不行,又加上,1433(SQL Server默认端口)还是不行

这会23点多,也不好意思在问大佬了,先休息了。

第二天8点继续搞起,这时候思路清晰了些,应该先确定框架的数据库访问模块有问题还是基本的SQLClient就不支持。

于是写了个简单的ASP.NET连接数据库的程序,放Linux上跑跑看

提示sa登录失败,感觉有戏啊!说明可以连通,只是访问出现问题,连接串改为IP\实例名,可以了!

再次回到有问题的程序,试着连接串也改为IP\实例名,竟然可以了!好吧,估计昨晚是想让我早点休息,注意身体呢。

4、缺少动态加载dll

其实这个时候已经自动跳转到了login页,不过由于缺少动态调用的dll报错了(日志中也有记录了),当时发布版直接拷贝少了2个动态加载的dll了,缺少的dll放上去,好了,初步告成。

  • 设置外部访问

由于防火墙的原因(和Windows下IIS有点类似)默认情况下,Linux虚机部署的程序,只能在内部访问,外部访问不到,因为防火墙将相关端口屏蔽了。

设置方法:https://www.cnblogs.com/fujinliang/p/4218802.html

设置完后,重启机器,问题解决。

  • 已知、未知的问题

不过,由于Linux与Windows文件系统不一样,关于文件存储相关的逻辑都得调整的:

Windows下是C盘D盘E盘…这种的,在Linux下没这个的,直接就是/usr、/var这种的。

其他问题,还是未知,等着我去探索,需要做很多测试的。

补充

1)文件名大小写敏感(Jexus官网介绍Core就是这样,为了保持一致so在Jexus下的ASP.NET也一样的待遇了)导致 file not found 404

我说一个普通页面怎么那么慢,这家伙一直挂起等待文件404了。。

受影响的范围:图片、css、js、页面等各种文件路径,只要有一点不一样,就404了。

2)aspx页面动态加载的ascx中控件无法应用APPTheme的样式,手动写上CSSClass属性是可以的

大把大把的修改啊啊啊

后记

这是我第一次实操Linux(大学的时候只是在学校Linux机器上玩过飘过~)

期间关于Linux系统本身、虚机VMTool等都是初步接触,遇到的些问题也会在后面写下来。

一句话感觉:如果做Server感觉还是Linux会更好(轻巧不笨重),但是很不习惯各种命令行操作。。。

发布了48 篇原创文章 · 获赞 14 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/ewqewqqwe/article/details/105115961