我的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()方法中?
答案 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/。
谢谢, 麦克