前一篇中,我們簡單的講述了下如何在Linux.NET中部署第一個asp.net MVC 5.0的程序。而目前微軟已經(jīng)提出OWIN并致力于發(fā)展VNext,接下來系列中,我們將會向OWIN方向轉(zhuǎn)戰(zhàn)。
早在三周之前,我偶然的得到了一本《SignalR PRogramming in Microsoft ASP.NET》,在晚上不工作的時候?qū)@本書進(jìn)行細(xì)細(xì)研讀(到目前為止大概只研讀了一半)。雖然目前只有英文原版,但是這本書講得很不錯,即使需要抱著一本詞典來輔助閱讀,那也是值得的。
OWIN的發(fā)展,不僅對于傳統(tǒng)的MS.NET(常規(guī)運(yùn)行于Windows中的.NET)方向的開發(fā)是一個新的征程,對于我們Linux.NET方向的開發(fā)也同樣是一個新的紀(jì)元。至于關(guān)于OWIN發(fā)展所給我們帶來的好處,我這里給各位讀者隨意的列出這么幾條:
(1)、我們寫的代碼兼容性更高,項(xiàng)目的遷移更可靠(當(dāng)然前提是你使用的框架是支持OWIN的框架)
?。?)、社區(qū)將會更加活躍(由于OWIN具有更開放性,它鼓勵了一批人把自己的創(chuàng)意變成現(xiàn)實(shí))
?。?)、Web Server我們有更多的選擇,可以使用非IIS掛載自己的站點(diǎn)(當(dāng)然在Windows下,IIS仍然為一個最佳的選擇,不過目前IIS暫時沒有支持OWIN,想嘗試OWIN的暫時讀者只能用Katana,而Linux下的Jexus則已經(jīng)支持)。
?。?)、更多……
不過,凡事總有兩面性,OWIN所帶來的除了巨大的好處之外,還帶來了一些短期內(nèi)不好的附加屬性,最直接的就是增加了我們的學(xué)習(xí)成本,我們需要同時學(xué)習(xí)VNext之前的.NET知識,以及伴隨VNext新產(chǎn)生的知識(三五年內(nèi)這個是必須的)。不過我們目前還有Visual Studio 2014還沒有正式的發(fā)布,我們還有少許的時間供我們賽跑。等萬事已成定局的時候再來努力,那就只能看著其他人的背影了,畢竟“先來的喝湯,遲來的喝水,不來的啥都沒得喝”我說得對吧?
咳咳,言歸正傳,回到本節(jié)的主題,本節(jié)中我們將討論學(xué)習(xí):
?。?)、在Linux.NET中跑OWIN程序,怎么準(zhǔn)備
(2)、把兩個有趣的SignalR Demo部署向Linux.NET中
?。?)、搭個順風(fēng)車,NancyFx部署向Linux.NET
本文中的相關(guān)代碼已經(jīng)托管GitHub,大家可以點(diǎn)擊這里進(jìn)行下載。
1、我們需要準(zhǔn)備些什么
由于OWIN協(xié)議提出的時間并沒有太久,并且是許多支持OWIN的框架均是基于FrameWork 4.5的,因此為了您的程序成功部署,請使用最新版的Mono(Mono 3.4)作為Linux.NET的運(yùn)行環(huán)境。這里要特別指出注意的一點(diǎn),關(guān)于“Mono 3.4.tar.gz”這個包,官方所提供的安裝包其實(shí)是缺少組件的,因此如果各位讀者采用的是官方包編譯那么一般是報(bào)Error的,這里我們提供正確的安裝包,需要的讀者可以點(diǎn)擊這里進(jìn)行下載。
至于Linux中的OwinHost,Jexus已經(jīng)率先的給予支持,各位讀者只需移步到官網(wǎng)中下載版本為5.6以上的Jexus即可,也可以點(diǎn)擊這里直接進(jìn)行下載。
安裝方法與之前的一樣,需要的讀者可以移步到《Linux.NET 學(xué)習(xí)手記 (1)》查閱。
還有一點(diǎn)需要補(bǔ)充的,本系列的文章中Mono的安裝路徑均為“/usr/local/mono/” 與很多教程中采用的“/usr/”有所不同,因此如果選擇按照本系列教程的讀者,請務(wù)必確保安裝步驟每一步都執(zhí)行完成且正確。近期中收到了不少的朋友Jexus無法運(yùn)行,找不到Mono。這些基本是沒有設(shè)置好環(huán)境變量,造成系統(tǒng)掃描目錄的時候不掃描Mono的安裝目錄,繼而找不到bin/Mono。宇內(nèi)流云也給我建議能否將安裝目錄由“/usr/local/mono”改為“/usr/”,不過我看了下已有文章,發(fā)生改動的話影響就很大了(衷心感覺到寫文章就像寫項(xiàng)目一樣,文章多了項(xiàng)目也變大,改一個基類所有派生的子類都遭殃了),所以就壓著沒有改,各位讀者要千萬的留意(當(dāng)然,我目錄的選擇也是有故事的,有興趣的讀者可以留言,我可以分享出來)。
我們一直采用的開發(fā)模式是Windows中開發(fā),Linux中運(yùn)行,OWIN中也不例外。Windows中使用Katana作為Host,發(fā)布之后采用Jexus作為Host運(yùn)行。需要了解Katana安裝使用的讀者,也可移步到《如何安裝并簡單的使用OwinHost——Katana》。
2、部署兩個有趣的SignalR程序到Linux.NET中
SignalR框架作為支持OWIN協(xié)議的框架,自然是可以通過掛載到OwinHost的方式部署到Linux.NET中了。在本示例代碼中,里面有兩個基于SignalR的Demo,具體這個Demo是怎么做出來的我在這里就不作講解了,希望以后有機(jī)會單獨(dú)出一個SignalR的學(xué)習(xí)系列(待我覺得對SignalR無惑之時),到時再針對SignalR作出詳細(xì)的講解,現(xiàn)在就不誤導(dǎo)各位讀者了。
我們拿到代碼之后,用Visual Studio打開它,先講解如何部署Demo1,Demo1是一個簡易的在線聊天室。
首先,我們先在Jexus中新建一個網(wǎng)站配置文件:

然后在里面寫上配置(當(dāng)然,推薦直接拷貝出新的一份default,然后直接改里面的參數(shù)),在最后的一行中加上以下的這條語句:
OwinMain=Jws.OwinAdapter.MsOwin.dll,Jws.OwinAdapter.MsOwin.Adapter

這句話的作用是通知并讓Jexus支持OWIN(我稱它為OWIN模式)。
然后把我們的Demo向Linux中發(fā)布:

打開bin目錄,在bin中添加上Jexus針對OWIN的通用適配器(相關(guān)組件可以點(diǎn)擊這里進(jìn)行下載,源碼則可以點(diǎn)擊這里下載)
找到“Microsoft.AspNet.SignalR.Owin.dll”,把后綴改了或者直接刪除(如圖所示)

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

挺有趣的哈~!
至于Demo2,部署方式跟Demo1一致,部署成功之后的效果如下(網(wǎng)址也在圖中):

圖中的那個Guid框會跟著鼠標(biāo)走,并且鼠標(biāo)經(jīng)過任意的瀏覽器,其余瀏覽器均會同步這個Guid的位置,挺有趣好玩的。
這里提示一下:
?。?)、重新部署之后記得重啟Jexus
(2)、這個Demo可能會令CPU飆升,特別是虛擬機(jī)中。
3、給NancyFX搭個順風(fēng)車
可能有個別的讀者懂得怎么使用NancyFX,并且也可能手上有一些基于NancyFX框架的站點(diǎn)。NancyFX跟SignalR一樣,同樣支持OWIN協(xié)議,因此也是可以隨時從Windos中向Linux中部署的。事實(shí)上,部署NancyFX可說是只是動動手指頭的事情(沒有用到些“特別”的組件、代碼也按照標(biāo)準(zhǔn)的情況下),相比于SignalR簡單多了(前面兩個Demo中SignalR當(dāng)時是部署不成功的,后來和宇內(nèi)流云一同在調(diào)呀調(diào)呀才調(diào)試完畢,這里感謝他的技術(shù)支持)。
雖然我本人并沒有使用NancyFX的習(xí)慣,不過也順帶讓NancyFX搭個順風(fēng)車,講講它怎么部署。
示例代碼中,ExtraDemo是基于NancyFX做出來的Demo,我們可以把它部署到項(xiàng)目文件之后,直接向Linux中發(fā)布

然后添加上Jexus的適配器:

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

目前,支持OWIN協(xié)議的框架除了文中提及的兩個以外,還有其他存在,由于能力有限,那些框架我暫時也沒有嘗試使用過,有興趣的讀者可以自行嘗試,當(dāng)然也歡迎您將您的心得體會與我們一同分享。
下一篇中,我們將分析OwinHost與OWIN的框架到底是怎么“溝通”的,它又是怎么“驅(qū)動”OWIN框架的。下回見。
新聞熱點(diǎn)
疑難解答
圖片精選