共用方式為


使用 Visual Studio 或 Visual Web Developer 部署具有 SQL Server Compact ASP.NET Web 應用程式:部署至 IIS 作為測試環境 - 12 的 5

By Tom Dykstra

下載入門專案

本系列教學課程示範如何使用 Visual Studio 2012 RC 或 Visual Studio Express 2012 RC for Web,部署 (發佈) 包含 SQL Server Compact 資料庫的 ASP.NET Web 應用程式專案。 如果您安裝 Web 發佈更新,您也可以使用 Visual Studio 2010。 如需系列簡介,請參閱 系列的第一個教學課程。

如需示範 Visual Studio 2012 RC 版本之後所引進部署功能的教學課程,示範如何部署 SQL Server SQL Server Compact 以外的版本,並示範如何部署至 Azure App 服務 Web Apps,請參閱使用 Visual Studio ASP.NET Web 部署

概觀

本教學課程說明如何將 ASP.NET Web 應用程式部署至本機電腦上的 IIS。

當您開發應用程式時,通常會在 Visual Studio 中執行它來進行測試。 根據預設,這表示您使用 Visual Studio 開發伺服器 (也稱為 Cassini) 。 Visual Studio 開發伺服器可讓您輕鬆地在 Visual Studio 中開發期間進行測試,但無法與 IIS 完全相同。 因此,當您在 Visual Studio 中測試應用程式時,應用程式可能會正確執行,但在裝載環境中部署至 IIS 時失敗。

您可以透過下列方式更可靠地測試應用程式:

  1. 當您在開發期間於 Visual Studio 中測試時,請使用 IIS Express 或完整 IIS,而不是 Visual Studio 開發伺服器。 此方法通常會更精確地模擬您的網站在 IIS 下執行的方式。 不過,此方法不會測試您的部署程式,或驗證部署程序的結果是否會正確執行。
  2. 使用稍後將應用程式部署到生產環境的相同程式,將應用程式部署至開發電腦上的 IIS。 這個方法除了驗證您的應用程式將在 IIS 下正確執行之外,還會驗證您的部署程式。
  3. 將應用程式部署到盡可能接近生產環境的測試環境。 由於這些教學課程的生產環境是第三方裝載提供者,因此理想的測試環境會是裝載提供者的第二個帳戶。 您只會使用此第二個帳戶進行測試,但會設定與生產帳戶相同的方式。

本教學課程說明選項 2 的步驟。 選項 3 的指引會在 部署至生產環境 教學課程結束時提供,在本教學課程結束時,有選項 1 的資源連結。

提醒:如果您在完成教學課程時收到錯誤訊息或某些專案無法運作,請務必檢查 疑難解答頁面

將應用程式設定為在中型信任中執行

安裝 IIS 並部署至 IIS 之前,您將變更 Web.config 檔案設定,讓月台執行得更像在一般共用主控環境中執行。

裝載提供者通常會以 中型信任執行您的網站,這表示不允許執行某些動作。 例如,應用程式程式代碼無法存取 Windows 登錄,而且無法讀取或寫入位於應用程式資料夾階層外部的檔案。 根據預設,您的應用程式會在本機計算機上以 高信任 方式執行,這表示應用程式在部署至生產環境時可能會失敗。 因此,若要讓測試環境更精確地反映生產環境,您將設定應用程式以中型信任執行。

在應用程式 Web.config 檔案中,於 system.web 元素中新增信任元素,如本範例所示。

<configuration>
  <!-- Settings -->
  <system.web>
    <trust level="Medium" />
    <!-- Settings -->
  </system.web>
</configuration>

即使在本機計算機上,應用程式現在仍會在 IIS 中以中型信任執行。 這個設定可讓您儘快攔截應用程式程式代碼嘗試執行會在生產環境中失敗的專案。

注意

如果您使用 Entity Framework Code First 移轉,請確定您已安裝 5.0 版或更新版本。 在 Entity Framework 4.3 版中,移轉需要完全信任才能更新資料庫架構。

安裝 IIS 和 Web Deploy

若要部署至開發電腦上的 IIS,您必須安裝 IIS 和 Web Deploy。 這些未包含在預設 Windows 7 設定中。 如果您已安裝 IIS 和 Web Deploy,請跳至下一節。

使用 Web Platform Installer 是安裝 IIS 和 Web Deploy 的慣用方式,因為 Web 平台安裝程式會安裝 IIS 的建議組態,並在必要時自動安裝 IIS 和 Web Deploy 的必要條件。

若要執行 Web Platform Installer 來安裝 IIS 和 Web Deploy,請使用下列連結。 如果您已安裝 IIS、Web Deploy 或任何其必要元件,則 Web Platform Installer 只會安裝遺漏的專案。

將預設應用程式集區設定為 .NET 4

安裝 IIS 之後,請執行 IIS 管理員,以確定 .NET Framework 第 4 版已指派給預設應用程式集區。

從 [Windows 開始 ] 功能表中,選取 [ 執行],輸入 “inetmgr”,然後單擊 [ 確定]。 (如果 [開始] 選單中沒有執行命令,您可以按 Windows 鍵和 R 來開啟它。或者,以滑鼠右鍵按兩下任務列,按下 [屬性],選取 [開始功能表] 索引標籤,按兩下 [自定義],然後選取 [執行命令]。)

[Connections] 窗格中,展開伺服器節點,然後選取 [應用程式集區]。 在 [ 應用程式集區] 窗格中,如果 DefaultAppPool 指派給 .NET Framework 第 4 版,如下圖所示,請跳至下一節。

Inetmgr_showing_4.0_app_pools

如果您只看到兩個應用程式集區,而且兩者都設定為 .NET Framework 2.0,則必須在 IIS 中安裝 ASP.NET 4:

  • 以滑鼠右鍵按兩下 [Windows 開始] 選單中的 [命令提示字元],然後選取 [以系統管理員身分執行] 來開啟命令提示字元視窗。 然後使用下列命令,執行 aspnet_regiis.exe 以在 IIS 中安裝 ASP.NET 4。 (在 64 位系統中,將 “Framework” 取代為 “Framework64”.)

    cd %windir%\Microsoft.NET\Framework\v4.0.30319
    aspnet_regiis.exe –iru
    

    aspnet_regiis_installing_ASP.NET_4

    此命令會為 .NET Framework 4 建立新的應用程式集區,但預設的應用程式集區仍會設定為 2.0。 您將將目標為 .NET 4 的應用程式部署到該應用程式集區,因此您必須將應用程式集區變更為 .NET 4。

如果您關閉 IIS 管理員,請再次執行它,展開伺服器節點,然後按兩下 [ 應用程式 集區] 再次顯示 [ 應用程式集區 ] 窗格。

在 [ 應用程式集區] 窗格中,按兩下 [DefaultAppPool],然後在 [ 動作 ] 窗格中,按兩下 [ 基本設定]。

Inetmgr_selecting_Basic_Settings_for_app_pool

在 [編輯應用程式集區] 對話框中,將 .NET Framework 版本變更為 v4.0.30319 .NET Framework,然後按兩下 [確定]。

Selecting_.NET_4_for_DefaultAppPool

您現在已準備好發佈至 IIS。

發佈至 IIS

您可以使用 Visual Studio 2010 和 Web Deploy 來部署數種方式:

  • 使用 Visual Studio 單鍵發佈。
  • 建立 部署套件 ,並使用 IIS 管理員 UI 進行安裝。 部署套件包含 .zip 檔案,其中包含在 IIS 中安裝月臺所需的所有檔案和元數據。
  • 建立部署套件,並使用命令行加以安裝。

您在先前教學課程中完成的程式,設定 Visual Studio 以自動化部署工作適用於所有這三種方法。 在這些教學課程中,您將使用這些方法的第一個。 如需使用部署套件的詳細資訊,請參閱 ASP.NET 部署內容對應

在發佈之前,請確定您是在系統管理員模式中執行Visual Studio。 (在 Windows 7 [開始 ] 選單中,以滑鼠右鍵按下您使用之 Visual Studio 版本的圖示,然後選取 [ 以 Administrator.) 系統管理員模式執行] ,只有在您在本機計算機上發佈至 IIS 時才需要發佈。

方案總管 中,以滑鼠右鍵按兩下 ContosoUniversity 專案, (不是 ContosoUniversity.DAL 專案) ,然後選取 [發佈]。

此時會出現 [發行 Web] 精靈。

Publish_Web_wizard_Profile_tab

在下拉式清單中,選取 [ <新增...>]。

在 [ 新增配置檔 ] 對話框中,輸入 「測試」,然後按兩下 [ 確定]。

New_Profile_dialog_box

此名稱與您稍早建立的轉換檔案 Web.Test.config 中間節點相同。 此對應是當您使用此設定檔發佈時,Web.Test.config 轉換套用的原因。

精靈會自動前進到 [ 連線 ] 索引標籤。

在 [ 服務 URL ] 方塊中,輸入 localhost

在 [ 月臺/應用程式 ] 方塊中,輸入 預設的網站/ContosoUniversity

在 [ 目的地 URL] 方塊中,輸入 http://localhost/ContosoUniversity

不需要 [目的地 URL ] 設定。 當 Visual Studio 完成部署應用程式時,它會自動將您的預設瀏覽器開啟至此 URL。 如果您不想讓瀏覽器在部署後自動開啟,請將此方塊保留空白。

Publish_Web_wizard_Connection_tab_Test

單擊 [ 驗證連線 ] 以確認設定正確,而且您可以在本機計算機上聯機到 IIS。

綠色複選標記會驗證連線是否成功。

Publish_Web_wizard_Connection_tab_validated

[下一步 ] 以前進到 [ 設定 ] 索引標籤。

[ 組態 ] 下拉式方塊會指定要部署的組建組態。 默認值為 Release,這是您想要的專案。

讓 [ 在目的地移除其他檔案 ] 複選框保持清除。 因為這是您的第一個部署,因此目的地資料夾中還沒有任何檔案。

在 [資料庫] 區段中,於 SchoolContext 的 [連接字串] 方塊中輸入下列值:

Data Source=|DataDirectory|School-Prod.sdf

部署程式會將此 連接字串 放在已部署 Web.config 檔案中,因為已選取 [在運行時間使用此 連接字串]。

此外,在 [SchoolContext] 底下,選取 [套用 Code First 移轉]。 此選項會導致部署程式設定已部署 Web.config 檔案以指定 MigrateDatabaseToLatestVersion 初始化表達式。 當應用程式第一次在部署之後第一次存取資料庫時,此初始化表達式會自動將資料庫更新為最新版本。

DefaultConnection 的 [連接字串] 方塊中,輸入下列值:

Data Source=|DataDirectory|aspnet-Prod.sdf

更新資料庫 保持清除。 成員資格資料庫將會藉由複製 App_Data 中的 .sdf 檔案來部署,而且您不想讓部署程式使用此資料庫執行任何其他動作。

Publish_Web_wizard_Settings_tab_Test

[下一步 ] 以前進到 [預覽 ] 索引標籤。

在 [ 預覽 ] 索引標籤中,按兩下 [ 開始預覽 ] 以查看將複製的檔案清單。

Publish_Web_wizard_Preview_tab_Test

Publish_Web_wizard_Preview_tab_Test_with_file_list

按一下 [發佈]。

如果 Visual Studio 不在系統管理員模式中,您可能會收到錯誤訊息,指出許可權錯誤。 在此情況下,請關閉 Visual Studio,以系統管理員模式開啟它,然後嘗試再次發佈。

如果 Visual Studio 處於系統管理員模式,[ 輸出] 視窗會報告成功的建置和發佈。

Output_window_publish_Test

瀏覽器會自動開啟至本機計算機上 IIS 中執行的 Contoso University 首頁。

Internet Explorer 視窗的螢幕快照,其中顯示 Contoso University 環境指標為 Test 而非 Dev。

測試環境中的測試

請注意,環境指標會顯示「 (測試) 」,而不是「 (開發) 」,這會顯示環境指標 的Web.config 轉換成功。

Internet Explorer 視窗的螢幕快照,其中顯示 Contoso University 環境指標為 Test 而非 Dev。

執行 [學生] 頁面,以確認已部署的資料庫沒有學生。 當您選取此頁面時,可能需要幾分鐘的時間才能載入,因為 Code First 會建立資料庫,然後執行 Seed 方法。 (當您在首頁上時未執行此動作,因為應用程式尚未嘗試存取資料庫。)

Students_page_Test

執行 Instructors 頁面,確認 Code First 以講師數據植入資料庫:

Instructors_page_Test

從 [學生] 功能選取 [新增學生]、新增學生,然後在 [學生] 頁面中檢視新學生,以確認您可以成功寫入資料庫:

Add_Students_page_Test

Students_page_with_new_student_Test

從 [ 課程] 功能表中,選取 [更新點數]。 [ 更新點數 ] 頁面需要系統管理員許可權,因此會顯示 [ 登入 ] 頁面。 輸入您稍早建立的系統管理員帳戶認證 (“admin” 和 “Pas$w0rd”) 。 [ 更新點數 ] 頁面隨即顯示,這會驗證您在上一個教學課程中建立的系統管理員帳戶是否已正確部署到測試環境。

Log_In_page_Test

Update_Credits_page_Test

確認 Elmah 資料夾只有佔位符檔案存在。

Elmah_folder_Test

檢閱自動 Web.config Code First 移轉 變更

C:\inetpub\wwwroot\ContosoUniversity 的已部署應用程式中開啟 Web.config 檔案,您可以看到 Code First 移轉 設定部署程式的位置,以將資料庫自動更新為最新版本。

醒目提示部署程式設定 Code First 移轉 將資料庫自動更新為最新版本的螢幕快照。

部署程式也會建立新的 連接字串,讓 Code First 移轉 專門用來更新資料庫架構:

DatabasePublish_connection_string

這個額外的 連接字串 可讓您指定資料庫架構更新的一個用戶帳戶,以及用於應用程式數據存取的不同用戶帳戶。 例如,您可以將db_owner角色指派給 Code First 移轉,並將db_datareader和db_datawriter角色指派給應用程式。 這是常見的深度防禦模式,可防止應用程式中潛在的惡意代碼變更資料庫架構。 (例如,這可能會在成功的 SQL 插入式攻擊中發生。) 這些教學課程不會使用此模式。 它不適用於 SQL Server Compact,而且當您移轉至本系列稍後的教學課程中 SQL Server 時則不適用。 Cytanium 網站只提供一個用戶帳戶來存取您在 Cytanium 建立的 SQL Server 資料庫。 如果您能夠在案例中實作此模式,您可以執行下列步驟來執行此模式:

  1. [發佈 Web 精靈] 的 [設定] 索引標籤中,輸入指定具有完整資料庫架構更新許可權之使用者的 連接字串,然後清除 [在運行時間使用此 連接字串] 複選框。 在已部署的 Web.config 檔案中,這會變成 DatabasePublish 連接字串。
  2. 為您希望應用程式在運行時間使用的 連接字串 建立 Web.config 檔案轉換。

您現在已將應用程式部署至開發電腦上的 IIS,並在該處進行測試。 這會確認部署程式已將應用程式的內容複製到正確的位置, (排除您不想部署的檔案) ,以及 Web Deploy 在部署期間正確設定 IIS。 在下一個教學課程中,您將執行一項測試,以尋找尚未完成的部署工作:在 Elmah 資料夾上設定資料夾許可權。

相關資訊

如需在Visual Studio中執行 IIS 或 IIS Express的相關信息,請參閱下列資源: