初次使用 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 專案,但預設是沒有安裝的。還是必須要依下列動作安裝
若想要一個一個安裝,可以參考以下的網站 ( 中文官網也是這個 )
執行 VSCloudService.exe 安裝程式
第二個安裝 WindowsAzureSDK-x64.exe
============ 安裝 Azure 開發套件 之二 ===============================
============ 若是覺得很懶的話,就用懶人包吧!連 Fix 統統一次搞定 ===================
http://www.microsoft.com/windowsazure/sdk/
按下 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 請用「.」)
========= 專案 ======================
接下來就可以建立 MVC 3 的專案啦
選擇 MVC 3 Web Role
=====================================================
========== 選擇 Empty 的話! =========================
=====================================================
因為選擇了空專案,所以 Controller 和 View 都是空的
必須要用工具 把 Home 的 Controller 和 Index View 加上就可以了
若是以後都不會用到 ASP.NET 內建的 Provider 的話,就可以直接刪除吧!
但,若是本來就有在用的話,就必須升級 Provider 才行 ( 因為預設的套件沒有支援 SQL Azure )
把 Home/Index 加上去後就可以正常顯示了!
若沒有加的話,會出現下面的錯誤訊息
=====================================================
========== 選擇 Internet Application 的話! ===============
=====================================================
雖然很少人用 ASPNETDB ,但在 Cloud 上可隨時擴充的環境時,ASPState 用到的機會就很大。
建立連接至 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;
沒有指定的話,會出現以下的錯誤
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" />
如此一來就可以在開發環境中執行了
登入的功能也很正常!
若是要佈署上 Azure 的話,就必須在 SQL Azure 建立一樣的 DB
或是 用 Custom 的方式用 Azure Table Storage 來做都可以
=====================================================
===== 用 SQL Express 的話 =============================
=====================================================
可以直接安裝 NuGet 套件
只要開啟 Azure 專案時,就會自動調整 WebConfig
或是
http://visualstudiogallery.msdn.microsoft.com/27077b70-9dad-4c64-adcf-c7cf6bc9970c
執行並安裝 NuGet.Tools.vsix
安裝完成後,就可以在 VS 2010 中開啟
別忘了更新 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
在 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/