2013年3月29日

[Azure]使用Windows Azure WebSite服務無法上傳檔案或上傳中斷

Windows Azure WebSite服務可以允許我們透過FTP的方式來上傳程式或相關資源檔,如果遇到上傳檔案無法完成時,通常最大的可能是因為網站的大小超過了限制的1GB。

我們可以在這裡確認目前實際使用的空間大小。

image

如果超過1GB的限制,請檢查一下網站裡是不是有太多圖檔之類的文件,建議把他們搬到Windows Azure Storage上,減少網站本身的大小。

另外,檢查一下這些Log是不是有開啟,並且視情況關閉,他們也會占用1GB的空間。

image

接著,可以FTP到網站,看一下LogFiles目錄下是不是有可以刪除的舊的Log檔。

image

如果是使用PHP開發網站時,因為目前預設會開啟PHP Error Reporting,且目前沒辦法透過Portal關閉,我所找到的目前可行的方式,是透過下面這一行來disable log。

<?php error_reporting( 0 ) ?>

不過當然,應該還是要先檢查一下error log裡面記載的錯誤內容,確定程式可以處理這些錯誤後再來設定log level會比較健康一點。

[Azure]使用VS2012開發Cloud Service程式並設定兩個webrole instance時,IISExpress停止工作

使用Visual Studio 2012開發Cloud Service程式時,可以透過Compute Emulator在本機上模擬並偵錯;

正常情況下,VS允許我們在本地端模擬有一個以上role instance時的情況。不過偶爾會有人遇到設定了一個以上的Role Instnace時,IISExpress Crash的狀況。

當Compute Emulator執行時,我們可以在C:\Users\<USER ID>\AppData\Local\dftmp\Config目錄下找到執行環境的設定檔,

裡面可以找到這一段:

<Endpoint name="Endpoint1" address="127.255.0.0" port="82" publicPort="0" protocol="http" />



由這裡可以知道Compute Emulator中設定的Web Role的IP。如果設定了多個Role Instance,就會在這裡看到多個檔案。



如果我們在不同Instance設定檔裡,發現了同樣的IP設定,則由於不同的IISExpress不可以bind同一個IP + Port,我們的IISExpress很有可能因為這樣而Crash。



經過一番艱苦的奮戰…好啦,其實沒有那麼艱苦,解決的方法是,打開Regedit,找到下面這一段registry,把值改為大於等於1即可。



HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DevDiv\vs\Servicing\10.0\SP



Windows Azure SDK在1.5版之前,當設定兩個以上role instance在本機時,是透過127.0.0.1及不同的Port number來區分instance;在1.5版之後則改為以127.255.X.X的IP來區分instance,這個key是IISConfigurator.exe中為了workaround 1.4版與1.5+版SDK不同做法所加上的。



如果我們的機器上曾經安裝過較早期的SDK版本,那麼就有可能會遇到這個問題。

2013年3月27日

[Azure]Session State in Windows Azure (1) - 使用Azure SQL Database

在Windows Azure WebSites服務中需要Session State Server時,有幾個選擇:

  • 使用Azure SQL Database作為Session Server;原本在ASP.Net我們就可以使用SQL Server作為Session Server,SQL Azure Database作為SQL Database的子集,當然也可以用來儲存Session State。這個方式不管是使用WebSites服務或是Cloud Serivce服務都可以使用。

只不過,T-SQL的某些語法在Azure SQL DB是不支援的,並且我們也沒辦法用傳統的ASPNet_REGSQL在SQL Azure DB上建立Session DB,因此在建立Session DB的時候需要用別的方式。

首先下載這個檔案。裏面包含了兩個檔案:ASPStateInstall.sql與InstallSqlState.sql。

首先連線到我們的Azure SQL的Master db,並執行ASPStateInstall.sql來建立State DB。

image

然後連線到剛剛建立的ASPState資料庫,執行InstallSqlState.sql。

image

然後打開我們的ASP.Net專案,透過Nuget加入ASP.Net Universal Providers。

image

最後修改Web.config中的Session區段如下:

<sessionState mode="SQLServer"
sqlConnectionString="Server=tcp:&lt;SERVER>.database.windows.net;Database=ASPState;User ID=<USER>@<SERVER>;Password=<PASSWORD>;Trusted_Connection=False;Encrypt=True;"
cookieless="false" timeout="20" allowCustomSqlDatabase="true" />




這樣就完成以Azure SQL Database作為Session State的步驟了。

2013年3月26日

[Azure]用IntelliTrace來trace Cloud Service

在發布Cloud Service時,我們可以在進階設定的地方啟用IntelliTrace,這樣當我們的Cloud Service遇到問題時,就可以透過Visual Studio來做Debugging了。

要使用IntelliTrace,必須要Target .Net 4以上,並且要使用VS2010 Ultimate以上版本,然後在發布啟用IntelliTrace。

啟用的方式很簡單,發布時,在設定、進階設定啟用:

image

為了測試,我開啟一個新的Web Role,在Default.aspx中加入一個按鈕,並加入以下的code來產生一個exception:

        protected void error_Click(object sender, EventArgs e)
{
int zero = 0;
int one = 1;
int result = one / zero;
}


只要按下按鈕就換產生Exception。


接著發佈到Windows Azure上,按下按鈕產生錯誤。


image


為了要Debug,讓我們打開Visual Studio 2012,在左方的Server Explorer中,可以看到已經有Windows Azure Compute的節點。


打開他可以看到剛剛佈署的專案。這些Windows Azure的設定都是跟著Publishing Setting File的,只要您的電腦上有訂閱的publish setting,就會自動帶出來。


image


右鍵點擊Instance 0,選View IntelliTrace Logs


image


這邊可以看到有一個System.DivideByZeroException,下方可以看到Call Stack


image


Double Cliek上方的System.DivideByZeroException,會跳到這個Exception被丟出的那一行Code。


一整個相當方便啊!

Blog Archive

About Me