2011-11-14 30 views
2

我打算在Azure中進行一些淺色背景處理。我已經有一個webrole正在運行,並希望使用相同的角色,以便我不必爲此使用(並支付!)專門的輔助角色。Azure:結合網絡和輔助角色:應用程序池回收

我已閱讀我可以簡單地覆蓋WebRole類中的Run(),該類來自RoleEntryPoint,並在那裏實現我的'窮人的調度'。它應該定期從隊列中獲取消息並處理它們。

現在我的問題是:WebRole運行在它自己的進程或線程中,或者更重要的是,當應用程序池/應用程序域被回收時,WebRole會發生什麼?

回答

2

如果你正以飽滿的IIS模式(僅1.3 SDK起)運行時,RoleEntryPoint和IIS都在不同的進程。如果您的ServiceDefinition中有一個<Sites>元素,您將知道您正在使用完全IIS模式。

實際運行IIS網站中的w3wp.exe(就像你通常會期望的那樣),因爲它是自己的應用程序池。 RoleEntryPoint代碼由一個完全不同的進程啓動和管理,因此它們之間沒有任何聯繫(例如,崩潰不會影響另一個)。

+2

好了,最後的括號內的條款並不完全正確。如果您的RoleEntryPoint崩潰,Windows Azure將重新啓動角色實例,最終將重新啓動您的IIS網站。 – smarx

+0

@smarx - 好點。我在想更多的是相反的情況 - 網站崩潰。 – dunnry

+1

另外,對於「應用程序池/應用程序域被回收時WebRole會發生什麼」的問題 - 當AppPool回收時WebRole沒有任何反應。 – astaykov

2

要添加到@ dunnry的答案;是什麼也很有趣,是運行被稱爲在此文件夾中程序集的副本:

e:\approot\bin 

而IIS指向此文件夾中的應用程序的另一個副本:

e:\siteroot\0