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會更好(輕巧不笨重),但是很不習慣各種命令行操作。。。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章