1. 程式人生 > >Linux.NET學習手記(7)

Linux.NET學習手記(7)

前一篇中,我們簡單的講述了下如何在Linux.NET中部署第一個ASP.NET MVC 5.0的程式。而目前微軟已經提出OWIN並致力於發展VNext,接下來系列中,我們將會向OWIN方向轉戰。

早在三週之前,我偶然的得到了一本《SignalR Programming in Microsoft ASP.NET》,在晚上不工作的時候對這本書進行細細研讀(到目前為止大概只研讀了一半)。雖然目前只有英文原版,但是這本書講得很不錯,即使需要抱著一本詞典來輔助閱讀,那也是值得的。

OWIN的發展,不僅對於傳統的MS.NET(常規運行於Windows中的.NET)方向的開發是一個新的征程,對於我們Linux.NET方向的開發也同樣是一個新的紀元。至於關於OWIN發展所給我們帶來的好處,我這裡給各位讀者隨意的列出這麼幾條:

  (1)、我們寫的程式碼相容性更高,專案的遷移更可靠(當然前提是你使用的框架是支援OWIN的框架)

  (2)、社群將會更加活躍(由於OWIN具有更開放性,它鼓勵了一批人把自己的創意變成現實)

  (3)、Web Server我們有更多的選擇,可以使用非IIS掛載自己的站點(當然在Windows下,IIS仍然為一個最佳的選擇,不過目前IIS暫時沒有支援OWIN,想嘗試OWIN的暫時讀者只能用Katana,而Linux下的Jexus則已經支援)。

  (4)、更多……

不過,凡事總有兩面性,OWIN所帶來的除了巨大的好處之外,還帶來了一些短期內不好的附加屬性,最直接的就是增加了我們的學習成本,我們需要同時學習VNext之前的.NET知識,以及伴隨VNext新產生的知識(三五年內這個是必須的)。不過我們目前還有Visual Studio 2014還沒有正式的釋出,我們還有少許的時間供我們賽跑。等萬事已成定局的時候再來努力,那就只能看著其他人的背影了,畢竟“先來的喝湯,遲來的喝水,不來的啥都沒得喝”我說得對吧?

咳咳,言歸正傳,回到本節的主題,本節中我們將討論學習:

  (1)、在Linux.NET中跑OWIN程式,怎麼準備

  (2)、把兩個有趣的SignalR Demo部署向Linux.NET中

  (3)、搭個順風車,NancyFx部署向Linux.NET

本文中的相關程式碼已經託管GitHub,大家可以點選這裡進行下載。

 1、我們需要準備些什麼

由於OWIN協議提出的時間並沒有太久,並且是許多支援OWIN的框架均是基於FrameWork 4.5的,因此為了您的程式成功部署,請使用最新版的Mono(Mono 3.4)作為Linux.NET的執行環境。這裡要特別指出注意的一點,關於“Mono 3.4.tar.gz”這個包,官方所提供的安裝包其實是缺少元件的,因此如果各位讀者採用的是官方包編譯那麼一般是報Error的,這裡我們提供正確的安裝包,需要的讀者可以點選

這裡進行下載。

至於Linux中的OwinHost,Jexus已經率先的給予支援,各位讀者只需移步到官網中下載版本為5.6以上的Jexus即可,也可以點選這裡直接進行下載。

還有一點需要補充的,本系列的文章中Mono的安裝路徑均為“/usr/local/mono/” 與很多教程中採用的“/usr/”有所不同,因此如果選擇按照本系列教程的讀者,請務必確保安裝步驟每一步都執行完成且正確。近期中收到了不少的朋友Jexus無法執行,找不到Mono。這些基本是沒有設定好環境變數,造成系統掃描目錄的時候不掃描Mono的安裝目錄,繼而找不到bin/Mono。宇內流雲也給我建議能否將安裝目錄由“/usr/local/mono”改為“/usr/”,不過我看了下已有文章,發生改動的話影響就很大了(衷心感覺到寫文章就像寫專案一樣,文章多了專案也變大,改一個基類所有派生的子類都遭殃了),所以就壓著沒有改,各位讀者要千萬的留意(當然,我目錄的選擇也是有故事的,有興趣的讀者可以留言,我可以分享出來)。

我們一直採用的開發模式是Windows中開發,Linux中執行,OWIN中也不例外。Windows中使用Katana作為Host,釋出之後採用Jexus作為Host執行。需要了解Katana安裝使用的讀者,也可移步到《如何安裝並簡單的使用OwinHost——Katana》

2、部署兩個有趣的SignalR程式到Linux.NET中

SignalR框架作為支援OWIN協議的框架,自然是可以通過掛載到OwinHost的方式部署到Linux.NET中了。在本示例程式碼中,裡面有兩個基於SignalR的Demo,具體這個Demo是怎麼做出來的我在這裡就不作講解了,希望以後有機會單獨出一個SignalR的學習系列(待我覺得對SignalR無惑之時),到時再針對SignalR作出詳細的講解,現在就不誤導各位讀者了。

我們拿到程式碼之後,用Visual Studio開啟它,先講解如何部署Demo1,Demo1是一個簡易的線上聊天室。

首先,我們先在Jexus中新建一個網站配置檔案:

然後在裡面寫上配置(當然,推薦直接拷貝出新的一份default,然後直接改裡面的引數),在最後的一行中加上以下的這條語句:

OwinMain=Jws.OwinAdapter.MsOwin.dll,Jws.OwinAdapter.MsOwin.Adapter

這句話的作用是通知並讓Jexus支援OWIN(我稱它為OWIN模式)。

然後把我們的Demo向Linux中釋出:

開啟bin目錄,在bin中新增上Jexus針對OWIN的通用介面卡(相關元件可以點選這裡進行下載,原始碼則可以點選這裡下載)

找到“Microsoft.AspNet.SignalR.Owin.dll”,把字尾改了或者直接刪除(如圖所示)

最後再重啟下Jexus,然後我們就可以用瀏覽器訪問了(網址如圖,高清大圖來的)。

挺有趣的哈~!

至於Demo2,部署方式跟Demo1一致,部署成功之後的效果如下(網址也在圖中):

圖中的那個Guid框會跟著滑鼠走,並且滑鼠經過任意的瀏覽器,其餘瀏覽器均會同步這個Guid的位置,挺有趣好玩的。

這裡提示一下:

  (1)、重新部署之後記得重啟Jexus

  (2)、這個Demo可能會令CPU飆升,特別是虛擬機器中。

3、給NancyFX搭個順風車

可能有個別的讀者懂得怎麼使用NancyFX,並且也可能手上有一些基於NancyFX框架的站點。NancyFX跟SignalR一樣,同樣支援OWIN協議,因此也是可以隨時從Windos中向Linux中部署的。事實上,部署NancyFX可說是隻是動動手指頭的事情(沒有用到些“特別”的元件、程式碼也按照標準的情況下),相比於SignalR簡單多了(前面兩個Demo中SignalR當時是部署不成功的,後來和宇內流雲一同在調呀調呀才除錯完畢,這裡感謝他的技術支援)。

雖然我本人並沒有使用NancyFX的習慣,不過也順帶讓NancyFX搭個順風車,講講它怎麼部署。

示例程式碼中,ExtraDemo是基於NancyFX做出來的Demo,我們可以把它部署到專案檔案之後,直接向Linux中釋出

然後新增上Jexus的介面卡:

重啟Jexus,即可完成NancyFX的部署。訪問頁面:

目前,支援OWIN協議的框架除了文中提及的兩個以外,還有其他存在,由於能力有限,那些框架我暫時也沒有嘗試使用過,有興趣的讀者可以自行嘗試,當然也歡迎您將您的心得體會與我們一同分享。

下一篇中,我們將分析OwinHost與OWIN的框架到底是怎麼“溝通”的,它又是怎麼“驅動”OWIN框架的。下回見。