Azure:如何执行启动任务延迟?

时间:2011-11-27 16:35:04

标签: iis azure azure-web-roles appcmd azure-configuration

我的WebRole中有两个站点,并定义了一个启动任务。

第一行正常,它为我创建了一个新的App池:

%WINDIR%\system32\inetsrv\appcmd.exe add apppool /name:"VCPool" /managedRuntimeVersion:"v4.0" /managedPipelineMode:"Integrated"

现在我想将我的第二个更改为这个新创建的AppPool,但是之后添加另一行,并没有帮助。

%WINDIR%\system32\inetsrv\appcmd.exe set app "WebRole_IN_0_VC/" /applicationPool:"VCPool"

似乎第二个网站还没有准备好。

如何将我的任务延迟30秒或稍微延迟appcmd.exe? 除非有办法为这个启动任务创建依赖关系,否则它只能在第二个站点启动并运行时执行?

任何帮助都将受到高度赞赏, 非常感谢,

有没有办法将此执行延迟30秒,以确保第二个站点已启动并可以更改?

更新

感谢您的提示。我已经对此事进行了进一步的调查。我找到了OnStart()事件。

1)但是由于我使用的是Silverlight并且只是将现有的Web项目包装在Cloud Roles项目中,所以我不会有这样的WebRole.cs。我可以将它添加到我的Silverlight Web项目并在那里使用它吗?或者是否建议从头开始创建WebRole项目并使其完全替换Silverlight Web项目?

2)关于服务定义中的<Runtime/>标签,我只是像这样添加它吗?当webrole运行升级时,它会有任何安全隐患吗?

<WebRole name="WebRole" enableNativeCodeExecution="true" vmsize="ExtraSmall">
    <Runtime executionContext="elevated"/>
    <Sites>
      <Site name="WebRole" physicalDirectory="./WebRole">
      ...
    </Sites>
</WebRole>

3)最后但并非最不重要的是如何运行cmd文件或实际上是这行

%WINDIR%\system32\inetsrv\appcmd.exe set site /site.name:"WebRole_IN_0_VC" /[Path='/'].applicationPool:"ASP.NET v4.0" >>Log.txt
在OnStart()方法中

3 个答案:

答案 0 :(得分:3)

您是否可以探索使用PowerShell脚本执行这些任务。 PowerShell有一种睡眠线程的方法。像

这样的东西

批处理文件

%WINDIR%\system32\inetsrv\appcmd.exe add apppool /name:"VCPool" /managedRuntimeVersion:"v4.0" /managedPipelineMode:"Integrated"
powershell -command "Set-ExecutionPolicy Unrestricted" 2>> err.out 
powershell .\sleep.ps1 2>> err.out
%WINDIR%\system32\inetsrv\appcmd.exe set app "WebRole_IN_0_VC/" /applicationPool:"VCPool"

我没试过,但应该有效。请参阅此post以了解Powershell集成。

答案 1 :(得分:2)

您发现的网站是在“任务”部分运行后创建的。而是从'OnStart'事件运行您的代码。该点将创建该站点。您可能需要更新服务定义文件以运行“提升”角色。这可以通过添加此标记来完成:

<Runtime executionContext="elevated"/>

<强>被修改

回答你的进一步问题:

1)无论您拥有什么项目,您都应该能够添加RoleEntryPoint类。您可能必须手动执行此操作。

2)添加运行时标记不会给部署带来任何重大风险。

3)创建一个cmd文件以将命令放入(即OnStart.cmd)并使用如下代码:

System.Diagnostics.Process.Start("OnStart.cmd")

有关在此处启动流程的更多信息:http://msdn.microsoft.com/en-us/library/53ezey2s.aspx

答案 2 :(得分:1)

对于那些感兴趣的人...我刚刚在博客上写了关于如何在Windows Azure上执行AppCmd启动任务配置IIS网站 - 包括通过Web角色名称查找站点,并延迟执行它,以便Azure的IISConfigurator已经创建了站点配置.EXE。

更多信息:http://mvolo.com/configure-iis-websites-windows-azure-startup-tasks-appcmd/

谢谢, 麦克