2

我的 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() 方法中?

4

3 回答 3

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"

我没有尝试过,但它应该可以工作。请参阅这篇文章以了解有关 Powershell 集成的信息。

于 2011-11-27T17:36:02.760 回答
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

于 2011-11-27T19:55:47.723 回答
1

For those interested ... I just blogged about how to execute AppCmd startup tasks on Windows Azure configure IIS websites - including finding the site by web role name, and executing it delayed so that the site config is already created by Azure's IISConfigurator.exe.

More here: http://mvolo.com/configure-iis-websites-windows-azure-startup-tasks-appcmd/.

Thanks, Mike

于 2012-07-16T17:25:39.673 回答