我的 WebRole 中有两个站点,并定义了启动任务。
第一行工作正常,它为我创建了一个新的应用程序池:
%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() 方法中?
最佳答案
您可以探索使用 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 集成。
关于iis - Azure:如何执行延迟的启动任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8287088/