2012-11-06 20 views
0

如果我在worker角色實例的主循環周圍有一個try/catch,當例如worker角色被更新/重新啓動時會引發任何異常嗎?windows azure - 當角色被破壞時的事件

是否有另一種方式鉤在「銷燬」事件,就像全局的try/catch處理程序或析構函數? (可以肯定的是,幕後的任何實例都是這樣,所以它們可以將實例與環境隔離開來)

工人/ web角色實例的整個生命週期事件是什麼?

總而言之,Azure是一個防故障和穩定的平臺,但也可以說一個實例可以隨時消失。如何確保代碼中的某些「關鍵」部分不會被環境中斷,並且會完成不間斷。

+0

有什麼其他的東西你比我回答什麼? – f0x

+0

因此,最後,問題仍然存在:如果某件事(例如外部COM組件)拋出'UnhandledException',該怎麼辦?這是不是很妥帖處理,如何? MSDN說'Stopping'並沒有被解僱。這個想法是:我是否需要製作整個實例代碼,記住它可以在角色實例中的某個其他線程中由於某種異常而被任何一分鐘吹走,或者誰知道什麼? Azure是否照顧到了這一點?如何編寫處理100%情況的處理程序,而不僅僅是99.99%? –

回答

0

當按有序方式取下角色時,將調用workerrole.cs文件中的OnStop方法;

MSDN Link

public override void OnStop() 
{ 
    try 
    { 
     // Add code here that runs when the role instance is to be stopped 
    } 
    catch (Exception e) 
    { 
     Trace.WriteLine("Exception during OnStop: " + e.ToString()); 
     // Take other action as needed. 
    } 
} 

但是我認爲你嘗試捕捉將足以對任何非正常的問題。 ;)

+0

很酷。我並不十分熟悉他的生活週期。我擔心環境會隨時終止進程,並且想象一些工作線程正在拋出「系統處於關閉狀態」或「線程正在中止」類型的異常 - 類似於關閉PC。看起來(根據MSDN),如果你不保留'OnStop'線程,直到你完成工作,這將會發生。 –