天天看點

讓ASP.NET5在Jexus上飛呀飛

    就在最近一段時間,“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版本。

讓ASP.NET5在Jexus上飛呀飛

    如果顯示的不是beta2版本,而是beta1版本,各位讀者可以通過執行”kvm upgrade“進行更新。

    至此,我們就擁有了一個供ASP.NET5的運作環境。

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

    首先,我們需要建立一個ASP.NET5的程式,用VS15PrewView或者CTP5随你喜歡,并寫上簡單的代碼確定能夠運作。

讓ASP.NET5在Jexus上飛呀飛

    然後釋出到本地目錄。

讓ASP.NET5在Jexus上飛呀飛

    對ASP.NET5有所了解的讀者對這玩意絕對不陌生,我們等下需要部署裡面的東西。鏡頭先轉到Linux中,我們進行Linux的配置。

    我們先對Jexus中的SiteConfig進行配置,配置好相關的端口、位址,并添加"OwinMain=Jws.OwinAdapter.Next.dll,Jws.OwinAdapter.Next.Adapter"這行。

讓ASP.NET5在Jexus上飛呀飛

    把剛才釋出的項目中的源碼路徑(/approot/src/Demo1)中的内容全部上傳到Linux.NET的網站根目錄中。

    把webroot中的靜态資源也上傳到根目錄中(bin/和web.config就不要了)。

    在根目錄建立一個bin檔案夾,并把Jexus的ASP.NET5擴充卡上傳到bin目錄中(“Jws.OwinAdapter.Next.dll”和“k.config”).

    得到的效果入下圖所示:

讓ASP.NET5在Jexus上飛呀飛

    接下來就是重頭戲了,使用vi打開“project.json”:

      除了“dependencies”節點其他的全部删除,“dependencies”裡面的内容也清空。

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

    完成後效果如下圖:

讓ASP.NET5在Jexus上飛呀飛

   儲存退出。最後在根目錄執行:

      kpm restore

   ASP.NET5會自動的到所有的NuGetServer下載下傳并解決相關依賴,類似于Yum(對網絡要求高)。

   執行完成之後,啟動Jexus即可。

讓ASP.NET5在Jexus上飛呀飛

   通路我們的頁面,頁面被成功的通路了。

讓ASP.NET5在Jexus上飛呀飛

    三、Adapter技術内幕

    通過上述操作,我們的ASP.NET5已經成功的在Jexus上跑起,相信不少讀者也已經發現,在Jexus上運作ASP.NET5跟在VS中釋出的預設方式是有所不同的,使用Jexus的方式與目前的ASP.NET MVC 1-5更接近。

讓ASP.NET5在Jexus上飛呀飛

    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

(如果您覺得這篇文章寫得好或者有用請點個贊)

繼續閱讀