初次使用 Azure 的環境建置和問題排除 for MVC 3

初次使用 Azure 的環境建置和問題排除 for MVC 3

好久之前跟威簾在試 BizTalk 的 AppFabric 功能,雖然網路上已經有很多資料了

但,當時在準備環境時還是卡了好一會,想說整理一直到現在再碰 Windows Azure 又是好幾個月後的事了

 

現在再把新的問題整理一下好了!

 

首先準備開發環境!

當然 必須要 Windows 2003 XP3 以上的版本

但若真的要搞 Azure 的話,還是建議用 Windows 7 / 2008 R2 是最適當的。

開發環境則是 VS 2010 SP1 以上的版本,因為有很多 Framework 必須要用到 4.0 啦!

 

我自已用的環境是

Windows 2008 R2 SP1 中文

VS 2010 Ultimate 中文 ( 沒有安裝 SQL Express )

安裝 Windows Azure 套件 ( 英文 )

Windows Azure 1.4

SQL Server 2008 R2

============  安裝 Azure 開發套件 之一  ===============================

 

TIP:VS 2010 裡雖然有 Cloud 專案,但預設是沒有安裝的。還是必須要依下列動作安裝

 

若想要一個一個安裝,可以參考以下的網站 ( 中文官網也是這個 )

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=7a1089b6-4050-4307-86c4-9dadaa5ed018&displaylang=en

執行 VSCloudService.exe 安裝程式

clip_image002

第二個安裝 WindowsAzureSDK-x64.exe

image

 

============ 安裝 Azure 開發套件 之二 ===============================

============  若是覺得很懶的話,就用懶人包吧!連 Fix 統統一次搞定  ===================

 

http://www.microsoft.com/windowsazure/sdk/

image

按下 Get Tools & SDK 就會安裝 Web PI ,接下來就一口氣幫你裝到好啦!

 

第二次我也是用這個,連升級都一次搞定  ( 天啊!我好懶 )

 

Tip:若是要用 SQL Server 請先安裝好 , 不然它會自動幫你安裝 SQL Express

 

========= 設定 Azure 用的資料庫 ======================

有以下的錯誤訊息,就代表電腦中沒有 設定,也沒有辦法正確執行 Azure 模擬器

 

Windows Azure Tools: Failed to initialize Windows Azure storage emulator. Unable to start Development Storage. Failed to start Development Storage: the SQL Server instance ‘localhost\SQLExpress’ could not be found. Please configure the SQL Server instance for Development Storage using the ‘DSInit’ utility in the Windows Azure SDK.

 

http://msdn.microsoft.com/en-us/library/gg433005.aspx

開啟 Command line

「CD C:\Program Files\Windows Azure SDK\v1.4\bin\devstore\」

「DSInit.exe /sqlInstance:.」 ( 本機的 SQL Server 請用「.」)

clip_image004

 

=========  專案   ======================

接下來就可以建立 MVC 3 的專案啦

image

image

選擇 MVC 3 Web Role

image 

=====================================================

==========  選擇 Empty 的話!  =========================

=====================================================

image

因為選擇了空專案,所以 Controller 和 View 都是空的

必須要用工具 把 Home 的 Controller 和 Index View 加上就可以了

 

image

若是以後都不會用到 ASP.NET 內建的 Provider 的話,就可以直接刪除吧!

但,若是本來就有在用的話,就必須升級 Provider 才行 ( 因為預設的套件沒有支援 SQL Azure )

 

image

把 Home/Index 加上去後就可以正常顯示了!

若沒有加的話,會出現下面的錯誤訊息

image

 

=====================================================

========== 選擇 Internet Application 的話! ===============

=====================================================

雖然很少人用 ASPNETDB ,但在 Cloud 上可隨時擴充的環境時,ASPState 用到的機會就很大。

 

image
建立連接至 SQL Server 時,發生網路相關或執行個體特定的錯誤。找不到或無法存取伺服器。確認執行個名稱是否正確,以及 SQL Server 是否設定為允許遠端連線。 (provider: SQL Network Interfaces, error: 26 - 搜尋指定的伺服器/執行個體時發生錯誤)

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)

 

當沒有 SQL Express 的話!就會出現以上的錯誤

因為 Azure 和 ASP.NET Universal Providers 預設都是用 SQL Express

 

經過反覆嘗試後,確認就是 ASPNETDB 和 ASPState 的關係

在 Connection String 中 可以看到已有兩個現成的項目

ApplicationServices  就是用  ASPNETDB

而 DefaultConnection 則是 ASPState

---------------------------------------------------------------------

以下是用可以登入 SQL Server 的帳號進行的

使用 Command Line

 

cd C:\Windows\Microsoft.NET\Framework\v4.0.30319

執行「aspnet_regsql.exe -S localhost -E -ssadd -sstype p」 會建立 ASPNETDB

執行「aspnet_regsql.exe -E -S localhost -A mr」會建立 ASPState

---------------------------------------------------------------------

再把 Connection String 更新成 指定的資料庫就可以了!

別忘了加上  MultipleActiveResultSets=True;

 

沒有指定的話,會出現以下的錯誤

image

EFProviders require MultipleActiveResultSets=True for System.Data.SqlClient connection strings.

 

我用的 Connection String 供參考

<add name="ApplicationServices" connectionString="Data Source=.;Initial Catalog=ASPNETDB;User ID=sa;Password=123123;MultipleActiveResultSets=True;"
  providerName="System.Data.SqlClient" />
<add name="DefaultConnection" connectionString="Data Source=.;Initial Catalog=ASPState;User ID=sa;Password=123123;MultipleActiveResultSets=True;"
  providerName="System.Data.SqlClient" />

 

如此一來就可以在開發環境中執行了

image

登入的功能也很正常!

 

若是要佈署上 Azure 的話,就必須在 SQL Azure 建立一樣的 DB

或是 用 Custom 的方式用 Azure Table Storage 來做都可以

 

=====================================================

=====  用 SQL Express 的話 =============================

=====================================================

 

可以直接安裝 NuGet 套件

只要開啟 Azure 專案時,就會自動調整 WebConfig

 

http://nuget.org/ 

或是

http://visualstudiogallery.msdn.microsoft.com/27077b70-9dad-4c64-adcf-c7cf6bc9970c

image

執行並安裝 NuGet.Tools.vsix

image

安裝完成後,就可以在 VS 2010 中開啟

image

image

image

別忘了更新 ASP.NET Universal Providers 套件 變成 1.0.1

 

 

 

希望這些問題可以讓其他朋友在用即有的 ASP.NET MVC 3 在開發環境時能有所幫助

 

 

參考資料

邊做邊學 Windows Azure AppFabric Service Bus:打造服務導向應用程式

http://msdn.microsoft.com/zh-tw/windowsazure/ff629018

Windows Azure AppFabric Samples

http://msdn.microsoft.com/en-us/library/ee706741.aspx

Windows Azure AppFabric SDK V1.0 - October Update

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=39856a03-1490-4283-908f-c8bf0bfad8a5

Windows Azure Tools 1.4 Released

http://ntotten.com/2011/08/windows-azure-tools-1-4-released/

Introducing System.Web.Providers - ASP.NET Universal Providers for Session, Membership, Roles and User Profile on SQL Compact and SQL Azure

http://www.hanselman.com/blog/IntroducingSystemWebProvidersASPNETUniversalProvidersForSessionMembershipRolesAndUserProfileOnSQLCompactAndSQLAzure.aspx

在 Windows Azure 應用程式上的狀態管理

http://msdn.microsoft.com/zh-tw/windowsazure/gg442342

How to migrate your ASP.NET site to the Azure cloud

http://www.developerfusion.com/article/119960/upgrade-your-aspnet-site-to-the-cloud/

工作階段狀態模式

http://msdn.microsoft.com/zh-tw/library/ms178586.aspx

Deploying the Windows Azure ASP.NET MVC 3 Web Role

http://www.wadewegner.com/2011/08/deploying-the-windows-azure-asp-net-mvc-3-web-role/