ASP.NET MVC3 on Mono的折騰(一):Windows下的部署

來源:互聯網
上載者:User
文章目錄
  • 環境準備
  • 1.使用Mono 2.10的XSP伺服器失敗
  • 2.在Windows平台下使用Nginx+FastCGI-mono-server架起MVC3網站,但是表單提交後,ModelBinder無法正常綁定Action Model.

Mono 2.10支援MVC3和Razor的訊息著實讓我興奮了好一會兒,因為支援MVC3後,我就有可能做Kooboo CMS3相容Mono的相關測試工作。可是沒一會兒,我就發現,離我的目標還是有一點距離。不曉得是Mono 2.10本身存在的bug,還是我的原因,我總是無法很完美的在Mono運行起MVC3的網站,即使是用預設的MVC3網站模板建立的非常簡單的網站也是一樣。長期生活在微軟Windows/.NET平台的滋潤環境中,沒有Linux平台的使用經驗和基於設定檔的Web部署習慣,讓我花了不少的時間來解決原本很簡單的問題的。從使用XSP失敗,到折騰Windows下使用Nginx+FastCGI來Host ASP.NET MVC3網站,之後再花了半個周末如癡如醉的研究openSUSE下的Mono部署。雖然沒有解決MVC3的運行問題,但是總算還是搞清楚了如何在Mono部署ASP.NET網站,以及簡單的linux平台(openSUSE)操作。下面就簡單的記錄一下這些艱難曆程:

環境準備

在VS2010,用預設的MVC3網站模板建立一個簡單MVC網站,有簡單的首頁和登入頁面,並且在Bin下面要私人部署MVC3的相關依賴程式集除了Microsoft.Web.Infrastructure.dll。網站下載。

1.使用Mono 2.10的XSP伺服器失敗

Mono支援跨平台,當然包括Windows平台,而且在Windows平台下面,它也提供了一種非常簡單的方式來讓我們方便的通過Mono啟動Web網站,就這是XSP。在Mono安裝成功之後,它會在目錄的右鍵菜單中增加一個功能表項目“XSP 2 Web Server Here 2.10”,而我們只需要簡單的選擇這個功能表項目就可以將目錄作為Web網站用Mono運行起來。而這裡的XSP2,表示,我們使用的是ASP.NET 2.0,如果你需要用ASP.NET 4.0,那你可以通過修改註冊表的方式再增加一個類似的功能表項目,只是把執行的批處理由xsp2.bat改為xsp4.bat就行了。這原本是最為簡單的測試方案,而且我使用Mono2.8來啟動MVC2網站也是沒有任何問題。結果在Mono 2.10中,XSP的網站死活就是不響應,那個請求讓他運行一萬年,它也是在那邊loading,也不timeout。問題通過各種努力,最終無力解決。

2.在Windows平台下使用Nginx+FastCGI-mono-server架起MVC3網站,但是表單提交後,ModelBinder無法正常綁定Action Model.

XSP行不通,只能想其它辦法。在嘗試了在Windows使用Apache失敗之後,選擇了Nginx+FastCGI來架構ASP.NET網站。在園子裡面找到這篇介紹在Mono架設ASP.NET網站,不過根據這篇文章我始終沒有搞明白具體如何配置,好像很複雜的樣子,還要下載它提供的檔案,嘗試無果。幸好在Mono的官方網站找到Nginx的Mono設定檔,不過是Linux下面的配置。沒關係,看那配置也就那幾個步驟,應該很簡單。期間也遇到過一些問題,不過都順利解決,下面簡單記錄一下Nginx+Mono在Windows下部署ASP.NET網站的步驟:

1)從Nginx 的官方網站下載最新的Nginx軟體,純綠色,無需安裝。下載之後,解壓到某一目錄,這裡是:E:\Mono\nginx-0.9.4

2)為了方便,把你的ASP.NET網站,也拷到Nginx目錄下面,我這邊使用的目錄名稱是:Mono_MVC3

3)進入conf目錄下,找到nginx.conf,找到location /{},我們把這段配置改為我們自己的值:

location / {         root Mono_MVC3; #如果是其它絕對路徑要用:E:/a/b/c                  fastcgi_pass 127.0.0.1:9000;         fastcgi_param  SCRIPT_FILENAME  $document_root/$fastcgi_script_name;         include fastcgi_params; }

原本應該是還有一行fastcgi_index Default.aspx,用來設定預設頁面; 但因為我這裡是Host MVC網站,所以去掉這行配置。如果沒有去掉這行,網站的根目錄將會無法訪問。

4)部署MVC網站,除了去掉預設首頁設定之外,還需要在conf目錄下找到fastcgi_params這個檔案,在檔案最後加上下面兩行配置:

fastcgi_param  PATH_INFO          "";fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;

5)需要配置的部分都已經結束。下面就可以Mono FastCGI Server,這個命令列稍有差錯,就會讓我們的網站無法網站,結合了各方資料,我自己可以正常工作的命令列是:

D:\Program Files\Mono-2.10\bin>fastcgi-mono-server4 /socket=tcp:127.0.0.1:9000 /root="E:\Mono\nginx-0.9.4\Mono_MVC3" /applications=/:. /multiplex=True /port=8080

6)最後一步,運行:nginx.exe。注意,只需要雙擊運行就可以了,雙擊就會在後台執行,不用在命令列下面運行。

以上就是Nginx+Mono在Windows下面最詳細的配置步驟了。正常情況下,這時候我們只要訪問Http://localhost:8080,網站應該就可以正常工作了。但是,因為Mono 2.10和MVC3,我還是遇到問題了:

1)每次FastCGI-Mono-Server第一次解析網站,都會出錯,只要你重新整理一下頁面就可以正常訪問了。

2)當我們重新導向到登入頁,輸入使用者名稱密碼之後提交,又會遇到另外一個問題,Action無法被執行:

其實,在我最開始的嘗試中(另一台機器),是不會拋出異常的,提交過程正常,但是會提示你沒有輸入使用者名稱/密碼,也就是LogOnModel的屬性沒有通過ModelBinder正確綁定。我目前也搞不清楚是不是在官方的下載中,提供了不同的編譯版本。

在Windows下的部署,總算是有一個可以成功了,可是仍然還是存在運行不正確的問題。於是把目光投到Linux下面,看看Linux下面的部署會不會正確 ,畢竟Mono的主要部署情境還是在非Windows平台下。

後續:ASP.NET MVC3 on Mono的折騰(二):Linux(openSUSE)下的部署

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.