2011-06-14 24 views
1

我打算將一些初始化代碼插入OnStart()我的類的方法派生自RoleEntryPoint。這段代碼會對主機進行一些永久性的更改,所以如果它在同一臺機器上第二次運行,它將不得不檢測那些已經存在的更改並作出適當的反應,這將需要我額外的代碼。RoleEntryPoint.OnStart()可能在主機清理之前運行兩次嗎?

是否有可能OnStart()在主機被清除之前第二次運行?我是否需要此代碼才能在同一臺機器上第二次運行?

回答

3

是否有可能OnStart()運行 第二次在主機 機器被清除?

不確定如何解釋。

就永久性更改而言:每次啓動時應重複安裝的任何軟件,註冊表更改和其他修改。如果您要將文件寫入本地(非持久存儲),那麼您下次啓動時很有可能會看到這些文件,但不能保證。如果您在Windows Azure存儲(blob,表格,隊列)或SQL Azure中存儲某些內容,則存儲更改將在重新啓動後保留。

即使您保證本地更改將在重新啓動後仍然存在,但如果您擴展到更多虛擬機,這些更改將不會在其他實例上看到。

+0

我猜OnStart()會再次運行,如果我再次在同一主機上「啓動」,不是嗎? – sharptooth 2011-06-14 12:10:37

+0

是的。 OnStart(),Run()和OnStop()。您可以在OnStart()中執行大多數初始化任務。如果您需要運行MSI,修改註冊表設置等,則應該使用提升的權限設置啓動任務。 – 2011-06-14 12:37:34

3

我想官方的回答是角色實例在每個引導週期中不會多次運行它的Job。但是,我見過一些MSDN文章,建議您啓動idempotent啓動任務 - 例如, http://msdn.microsoft.com/en-us/library/hh127476.aspx - 因此可能最好向您的代碼添加一些簡單的檢查,以預測多次執行。

相關問題