微軟ASP.NET站點部署指南(5):部署到IIS上作為測試環境
2011-11-26 08:54 湯姆大叔 閱讀(10029) 評論(6) 收藏 舉報1. 綜述
開發程序的時候,通常我們是在Visual Studio 里測試,默認使用的是Visual Studio Development Server(Cassini),使用這個可以讓我們開發測試工作更容易,但是在IIS上可能不一定能夠正常工作。所以,結果可能是在Visual Studio 里運行正常,但是一旦部署到IIS上就會出錯。
你可以通過下面一些方法來測試確保你的程序沒問題:
- 開發的時候,使用IIS Express或者正式版IIS代替默認的Visual Studio Development Server來測試程序,這樣可以更能確保在IIS下少出問題。但是這個方法不能測試你的部署流程是否正確,或者驗證部署結構。
- 部署程序到你的開發機上的IIS,然后用同樣的步驟部署到生產環境,這樣驗證你的部署流程和是否能在生產環境運行成功。
- 部署到和生產環境接近的測試環境,由于生產環境是第三方的提供商,所以最理想的測試環境就是提供商開放第二個賬戶(僅用于測試目的),這樣就可以和正式的生產環境使用一樣的部署步驟了。
本章節演示的是第二種方式,第三種方式可以在第七章尾部講到,另外本章節的底部有第一種方式需要用的資源連接地址。
提醒:如果根據本章節所做的操作出現錯誤信息或一些功能不正常的話,請務必check Troubleshooting頁面。
2. 配置程序運行在Medium Trust上
安裝IIS和部署之前,我們需要修改Web.config文件以便配置更能接近共享主機環境。主機提供商通常會讓你的程序運行在medium trust級別上,那就是說有些事情是不允許做的,比如你不能訪問注冊表或者你程序之外的目錄讀寫文件。本機默認情況下是運行在high trust上,也就是有些你可以做的事情在生產環境上可能做不到了。因此,為了確保部署到生產環境沒問題,需要將測試環境的運行配置也改成medium trust。
在Web.config文件里,在system.web元素節點里添加<trust>元素,像下面一樣:
<configuration>
<!-- Settings -->
<system.web>
<trust level="Medium"/>
<!-- Settings -->
</system.web>
</configuration>
現在程序可以運行在medium trust上了,這樣你可以盡早發現需要high trust才能運行的錯誤了。
3. 安裝IIS和Web Deploy
你必須先安裝IIS和Web Deploy 才能將程序部署到你開發機的IIS上。因為默認Windows 7是不安裝這些組件的,如果你已經都安裝了,那請忽略這個section。
強烈推薦使用Web Platform Installer安裝IIS和Web Deploy,,因為會自動安裝IIS的推薦配置和自動安裝IIS和Web Deploy所需要的依賴軟件。
使用Web Platform Installer安裝IIS和Web Deploy,請使用下面的連接,如果你曾經安裝過其中的一種或者是相關的依賴軟件,那Web Platform Installer只會安裝剩余的部分。
4. 設置默認的應用程序池為.Net4
安裝IIS以后,運氣IIS管理器(開始->運行,輸入inetmgr,回車),確保默認程序池使用的.NET Framework版本是4。
在連接(Connections)面板,展開server節點選擇應用程序池(Application Pools),在右邊的面板里,查看DefaultAppPool使用的.NET framework版本是否是v4.0,如果是,請忽略此section。

如果你只能看到2個應用程序池,并且都是.NET Framework 2.0的話,你需要在IIS里安裝ASP.NET 4,然后再配置IIS才能使用。
打開一個command prompt窗口,右鍵選擇以管理員身份運行(Run as Administrator),然后運行aspnet_regiis.exe來安裝ASP.NET 4到IIS里。使用如下命令:
cd %windir%\Microsoft.NET\Framework\v4.0.30319
aspnet_regiis.exe –iru

上面的命名將會為.NET Framework 4創建2個應用程序池,但默認版本還是v2.0的。因為需要將程序部署到.NET 4的應用程序池上,所以需要修改它們的版本為NET 4。
重新運行IIS管理器,點擊應用程序池,重新查看右邊的面板,點擊DefaultAppPool,然后在操作面板(Actions)里點擊基本設置(Basic Settings)。

在編輯應用程序池(Edit Application Pool)對話框里,將.NET Framework version里的項修改成.NET Framework v4.0.30319,然后點擊確定(OK)。

現在就可以將程序發布到IIS上了。
5. 發布到IIS
使用Visual Studio 2010和Web Deploy部署有幾種方式:
- 使用Visual Studio one-click發布
- 創建部署包,然后使用IIS Manager 管理控制臺安裝,部署包是一個.zip文件,包含了所有需要部署到IIS上的文件和元數據
- 創建部署包,然后使用命令行安裝
前面的章節都提到了這三種方式的Visual Studio自動部署設置方式。本章節用的是第一種。更多使用部署包的信息,可以查看ASP.NET Deployment Content Map。
發布之前,確保你的Visual Studio是運行在管理員模式下(開始菜單,右鍵Visual Studio 2010,選擇以管理員身份運行)。
改變當前active的build配置是Test,你可以從工具欄選擇(如下圖),或者從編譯(Build)菜單里的配置管理器(Configuration Manager)里選擇。

Solution Explorer里,右鍵ContosoUniversity項目,選擇發布(Publish),彈出Publish Web對話框。

設置profile名稱為"Test",如果沒看到文本框,而是看到下拉菜單就選擇new ,然后輸入新名稱。
Service URL里輸入“localhost”
Site/application里輸入"Default Web Site/ContosoUniversity"
選擇上Mark as IIS application on destination。(有些情況不需要部署到IIS上,例如項目本身就不是個web程序,它僅僅包含了一些圖片,XML文件等,這種情況就不用選擇了,以便不建立IIS程序。)

點擊發布(Publish),如果你收到如下信息框,請重新以管理員身份運行Visual Studio。

如果你關掉Visual Studio,例如以后的章節來重新打開它再發布的時候,請務必選擇以管理員身份運行,如果不是管理員身份,發布程序不會提示出錯框而是嘗試發布,有時候可能會提示一個沒有權限的錯誤信息。
如果是運行在管理員模式下,Output窗口會顯示編譯和發布成功的信息。

運行IIS管理器,在連接(Connections)面板里,你可以在默認站點(Default Web Site)下看到一個名字為ContosoUniversity的應用程序,如果之前都打開了IIS,你點擊刷新(Refresh)。在操作(Actions)面板點擊瀏覽(Browse *:80 (http))來驗證是否可以打開你的首頁。

不出錯的話,瀏覽器就會顯示Contoso University項目的首頁了。

6. 在測試環境中測試
打開瀏覽器訪問http://localhost/ContosoUniversity,重新運行首頁,可以看到頁面頂部顯示的標示符是"(Test)"而不是"(Dev)"了,這就意味著Web.config的transformation結果是正確的。

打開Students頁面驗證部署的數據庫里布包含任何students:

打開Instructors頁面驗證這些數據依然存在于數據庫中:

在Students菜單里選擇Add Students,添加一個student,然后可以看到Students 頁面顯示了一個student,說明已經成功保存到數據庫里了:


從Courses菜單,選擇Update Credits,因為該頁面需要administrator權限,所以跳轉到了Log In頁,輸入administrator賬戶信息("admin" 和 "Pas$w0rd")登錄以后, Update Credits就顯示了,這就驗證了上個章節創建的administrator賬戶已經正確的部署到測試環境了。


檢查Elmah文件夾是否存在并且值包含一個placeholder文件,這就驗證了前面章節設置的忽略部署該文件夾的XML文件執行成功了。

打開C:\inetpub\wwwroot\ContosoUniversity 目錄下的Web.config文件驗證Code First數據庫初始化參數值為Disabled:

現在,你成功將程序部署到你開發機的IIS上并且測試了,這驗證了部署流程不僅僅只是copy程序內容(也可以排除不需要部署的內容了),另外Web Deploy也成功配置了IIS站點。下一章節你將測試另外一個還沒搞定的部署任務:設置Elmah文件夾的寫權限。
7. 更多信息
關于在Visual Studio 里運行IIS或IIS Express的更多信息,請查看下面列出的資源:
- IIS Express Overview
- Introducing IIS Express
- How to: Specify the Web Server for Web Projects in Visual Studio.
- Core Differences Between IIS and the ASP.NET Development Server
- Test your ASP.NET MVC or WebForms Application on IIS 7 in 30 seconds
該帖提供了很多例子解釋為什么使用Visual Studio Development Server (Cassini)測試不如使用IIS Express測試可靠,以及為什么在IIS Express里測試沒有在IIS正式版里測試可靠的原因.
關于Visual Studio 2010里的自動化部署工具以及關于one-click發布和部署包更多的信息,請訪問:ASP.NET Web Application Project Deployment Overview。
關于主機提供商將程序運行在medium trust有可能引起的問題,請訪問:Hosting ASP.NET Applications in Medium Trust。
總目錄更新地址:點擊訪問
開發程序的時候,通常我們是在Visual Studio 里測試,默認使用的是Visual Studio Development Server(Cassini),使用這個可以讓我們開發測試工作更容易,但是在IIS上可能不一定能夠正常工作。所以,結果可能是在Visual Studio 里運行正常,但是一旦部署到IIS上就會出錯。
浙公網安備 33010602011771號