新聞中心
之前我就像某人說的那樣,I’m not quite a cloud guy,但是后來看了各式各樣的演示,認識了 Cloud Project 的構(gòu)成,以及 Mix 09 里面某人說 "It’s fun!” 以后,就沖著這句 It’s fun,我就扔了個 Hello World 上去,感覺還不錯的,但是缺乏做點什么的動力,后來就丟在一邊了。差不多的時間知道了 Google App Engine, 但不知GAE 猴年馬月才能用 .Net 技術(shù)的,我不會python/java,而且現(xiàn)在貌似 GAE 沒有跟 WorkerRole 相應(yīng)的東西,但是好歹也用上了GAppProxy,也叫在 Google 的云上爽了一把。

創(chuàng)新互聯(lián)建站是少有的成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、營銷型企業(yè)網(wǎng)站、重慶小程序開發(fā)、手機APP,開發(fā)、制作、設(shè)計、外鏈、推廣優(yōu)化一站式服務(wù)網(wǎng)絡(luò)公司,于2013年成立,堅持透明化,價格低,無套路經(jīng)營理念。讓網(wǎng)頁驚喜每一位訪客多年來深受用戶好評
這個情況下,在心愛的微軟的云上卻只有一個 Hello World 實在太說不過去了,于是打算找一段時間,將自己認識的有能力演示出來的東西都搞到云上去,反正現(xiàn)在 Azure 是免費的(希望以后的收費政策是 GAE 現(xiàn)在那種模式吧),不用白不用,浪費了自己漂亮的域名多可惜啊。好,就從剛 Release 不久的 Asp.Net MVC 開始。
如何開始
現(xiàn)在的 Visual Studio Tools for Azure(0903CTP) 是沒有安裝所謂的 MVC WebRole 模板的,也就是在 Roles –> Add –> New Web Role Project 不能搞出一個以 MVC 結(jié)構(gòu)開始的模板,只有 Default.aspx、web.config:
顯然不夠,然后發(fā)現(xiàn) Roles –> Add –> Web Role Project in solution.. 選項不能用,于是刪掉默認的 Web Role Project,新建一個 MVC Web Application 到解決方案,發(fā)現(xiàn)該選項仍然是無效的:
這時候,我的做法是用 diff 工具比較 MVC 項目文件 (C# 項目就是 .csproj 了) 和 Web Role 的項目文件,發(fā)現(xiàn) MVC 項目文件沒有 Web 以及一些指向 Azure SDK 中一些程序集的引用,用 diff 工具很快就能補上這些東西了。重新加載修改過的 MVC 項目文件,Roles –> Add –> Web Role Project in solution.. 就能選上了。
如果像我在開始的時候順便創(chuàng)建了測試項目的話,在上面這個過程可能會造成測試項目丟失對MVC項目的引用,編譯時會提示,加上即可。現(xiàn)在,按 F5 調(diào)試,等一輪初始化過程,MVC 項目默認首頁出來了。這就完成了嗎?
AspProviders & StorageClient
是差不多了,但是在 Azure 上運行的應(yīng)用程序可以有多個 Instances 的,每個 Instance 運行在不同的 Appdomain 里(瞎猜的,甚至可能在不同的虛擬機中,分布在不同的地理位置……),反正是隔離的,那么像登陸這類需要 Session 的操作會產(chǎn)生一些問題,具體什么問題很難說,我沒試過,大概就是注冊不了啊,登陸記不住之類的。這時候發(fā)揮 Google 的長處,會有驚喜的,我找到了 4 篇(1,2,3,4)相關(guān)的文章,原文都是英文,比較詳細,另外還有幾篇出自園友。除了關(guān)鍵的步驟,我就不重復(fù)他們的東西了。
說起來慚愧,我不是讀計算機專業(yè)的,之前學(xué)過一點 Asp,沒怎么學(xué)習(xí)過 Asp.Net,因此很多東西都是不久前才知道的,例如 Asp.Net 2.0 的 Provider Model。在這里 Provider Model 抽象出儲存的實現(xiàn),使得 Asp.Net 的各種狀態(tài)可以自由選擇儲存在不同的媒介中,而且可以通過配置文件更改,不得不說這個設(shè)計實在非常好。上面給出的第四篇相關(guān)文章就敘述了怎么打造一個可以在 Cloud 運行的 Membership Provider。
在 Azure SDK 的安裝目錄中,有一個 Samples.zip,里面包含有微軟提供的 AspProviders 例子,該例子提供了利用 Azure Storage 作為狀態(tài)信息的儲存媒介的樣例,順便也做了使用里面 StorageClient 樣例的例子,哈哈,在這里能發(fā)掘不少東西的。因為 StorageClient 很多公共方法沒有文檔,給 Supress 了。
RTFM
AspProviders 文件夾里有一樣很重要的東西,就是 providers-extended-readme.mht,我覺得這個文件一定要重視,如果你不打算寫自己的 Providers 的話。里面有些代碼用紅色高亮了,可惜背景是灰色的,看完肯定報廢一只眼睛,建議拿 Word 把那里的背景顏色改成黃色,看起來就舒服多了。
以下是我 RTFM 總結(jié)后的做法,希望對大家有用:
1.修改 Web.config,使那些 Providers 生效。大部分代碼可以從 AspProvidersDemo 中復(fù)制。其中要修改的是 appName 屬性,修改成應(yīng)用的名稱。Profile 的那個 inherits 屬性刪去,否則會出現(xiàn)運行時錯誤。
2.不使用readme 里面的標準 appSettings 設(shè)置 tableServiceBaseUri 等 addtional options,因為發(fā)布到云上就不能修改了,然而在本地調(diào)試的時候,用的是 local development storage。
3.修改 .csdef 和 .cscfg 文件,本地調(diào)試時按照 相關(guān)文章2 填寫,發(fā)布上傳之前,.cscfg 改成:
|
1.這里我加上了 DefaultProviderApplicationName 這條,否則用默認的:appName,有點惡心,這樣做記得在 .csdef 文件上加上相應(yīng)的定義。(多口一句:怎么像 C++ 的 h 文件那樣啊,居然要自己聲明元數(shù)據(jù)……)一些已知的問題
在我給出的相關(guān)文章里有了,簡單歸納就是:
1.注意 Request.Url 的額外信息
2.安裝這個 HotFix(同時修復(fù)了一個 WPF 設(shè)計器的問題)
3.不明白為什么要 Create Test Storage Tables 的話,請看這里
最后
可能因為Azure 還是 Preview 階段吧,這些 Providers 的配置都要靠自己RTFM 然后人工完成,希望微軟以后能提供 Azure MVC WebRole Project 模板,集成一套 Azure AspProviders,以及 StorageClient。然后呢,繼續(xù)讓某些人罵微軟太體貼,哈哈!說實話,微軟雖然讓人感覺無時無刻都在 JIT,但這不是很好嗎,這樣才有激情,讓微軟有動力嘛……又跑題了……
當(dāng)前名稱:淺談在Azure云中部署支持MVC的ASP.NET程序
URL分享:http://fisionsoft.com.cn/article/dppshpd.html


咨詢
建站咨詢
