mvc3部署到mono上面遇到的问题
1、經(jīng)過(guò)實(shí)驗(yàn),發(fā)現(xiàn)mono下只要是post請(qǐng)求,就無(wú)法通過(guò)Request獲取值,因?yàn)镽equest.Form.Keys.Count總是為0,拋開(kāi)apache直接運(yùn)行xsp4也存在同樣的問(wèn)題,由于MVC版HttpContext的獲取在MVC3的相關(guān)類(lèi)庫(kù)中進(jìn)行,而System.Web.Mvc是私有部署的,所以問(wèn)題要么發(fā)生在mono的System.Web的實(shí)現(xiàn)中,要么發(fā)生在XSP中,經(jīng)過(guò)了痛苦的搜索,有人提到mono中不能使用DefaultModelBinder,也有人提到mono當(dāng)前還不足以完全支持MVC3,但如果HttpContext中根本就沒(méi)有初始化POST請(qǐng)求的數(shù)據(jù),無(wú)論誰(shuí)的ModelBinder都無(wú)法拼出一個(gè)Model來(lái)。后來(lái),終于在mono的BUG更正列表中發(fā)現(xiàn)了一些蛛絲馬跡,在mono 2.10.2的Release notes頁(yè),BUG683339提到:
683339: POST variables are not transferred to HttpContext.Request.Params nor FormCollection in MVC3 appmono2.10.2之前的版本中,POST數(shù)據(jù)都無(wú)法在MVC3中讀取,在更新了mono2.10.2后,ModelBinder果然正常工作。
2、則是windows和linux下路徑的"\"和"/"的差異引起的IO異常,其實(shí)從windows環(huán)境下遷移到linux+mono中時(shí),有80%的問(wèn)題都集中在URL大小寫(xiě)和windows/linux的路徑問(wèn)題上。這個(gè)異常向上追蹤可在Stack Trace中看到這樣一條信息:
at PanGu.Dict.WordDictionary.LoadFromBinFile (string,string&) <IL 0x00014, 0x00089>? 推測(cè)是盤(pán)古分詞在讀取詞典時(shí)的路徑中使用了硬編碼的路徑分隔符,通過(guò)Reflector定位到該方法,果然看到了這樣的代碼:
public string GetDictionaryPath() {string dictionaryPath = this.DictionaryPath;string currentDirectory = Directory.GetCurrentDirectory();Directory.SetCurrentDirectory(Path.GetAssemblyPath());dictionaryPath = Path.GetFullPath(dictionaryPath);Directory.SetCurrentDirectory(currentDirectory);return Path.AppendDivision(dictionaryPath, '\\'); //<----------此處使用了硬編碼的路徑分隔符 }? ? 于是下載了盤(pán)古分詞的源碼,更改其中的詞典路徑為從配置文件中讀取,重新編輯部署了Pangu.dll后,果然可以正常搜索。這也教訓(xùn)我們,應(yīng)該養(yǎng)成良好習(xí)慣,盡可能少地使用硬編碼,多考慮代碼在多環(huán)境下的適用性。
以上是使用mono的點(diǎn)滴Debug經(jīng)驗(yàn),可能有很多人也會(huì)遇到同樣的問(wèn)題,希望有所幫助。
順道宣傳一下,經(jīng)過(guò)多輪壓力測(cè)試,發(fā)現(xiàn)其實(shí)mono的性能一點(diǎn)也不差,如果真有疑惑,相信科學(xué),相信實(shí)驗(yàn),自己試試就知道了。
?
還有在mvc部署到mono上面時(shí)是嚴(yán)格區(qū)分大小的
轉(zhuǎn)載于:https://www.cnblogs.com/win-and-first/archive/2012/10/23/mono_mvc.html
總結(jié)
以上是生活随笔為你收集整理的mvc3部署到mono上面遇到的问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: item21
- 下一篇: 一步一步学习 iOS 6 编程(第四版)