2011-06-14 76 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 - 因此可能最好向您的代码添加一些简单的检查,以预测多次执行。

相关问题