Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iis 创建网站后要运行的Azure启动任务_Iis_Azure_Azure Web Roles - Fatal编程技术网

Iis 创建网站后要运行的Azure启动任务

Iis 创建网站后要运行的Azure启动任务,iis,azure,azure-web-roles,Iis,Azure,Azure Web Roles,我已为Azure网站创建了一个启动任务,该任务执行以下操作: 创建应用程序池 将虚拟目录转换为虚拟应用程序 我已经创建了一个powershell脚本来执行这些任务 我已经在服务定义中设置了startup元素 <Startup> <Task commandLine="MyStartup.cmd" executionContext="elevated" taskType="simple"> </Task> </Startup> 到

我已为Azure网站创建了一个启动任务,该任务执行以下操作:

  • 创建应用程序池
  • 将虚拟目录转换为虚拟应用程序
我已经创建了一个powershell脚本来执行这些任务

我已经在服务定义中设置了startup元素

<Startup>
  <Task commandLine="MyStartup.cmd" executionContext="elevated" taskType="simple">
    </Task>
</Startup>

到目前为止一切都很好

然而,我们认为:

在中的启动任务阶段,IIS可能未完全配置 启动进程,因此特定于角色的数据可能不可用

我认为这意味着在运行powershell脚本时,IIS上可能不存在该网站。我已经测试了该脚本,但确实失败了,因为它在IIS上找不到虚拟目录

我的问题是:是否有办法确保在IIS上创建网站后运行powershell脚本

请注意,如果可能的话,我真的不想使用Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.OnStart


提前感谢。

查看位于的角色体系结构图。您可以看到,启动任务是在IISCOConfiguration为您的网站创建应用程序池之前执行的。这意味着您只能在OnStart中修改apppool


我没有尝试过这个,但是您可以创建一个后台类型的启动任务,它将允许启动过程的其余部分(即运行IISConfigurator)在您的启动任务仍在运行时继续进行,然后在启动过程中循环,直到检测到虚拟目录。

我根据@kwill的建议创建了以下内容:

Powershell:

while(!($myWeb = Get-Website -name "*MyWeb*")){ Write-Host "Website not installed. Waiting 30 seconds..." Start-Sleep 30 } # Proceed with installation 而(!($myWeb=Get-Website-name“*myWeb*”){ 写入主机“未安装网站。等待30秒…” 开始睡眠30分钟 } #继续安装 和配置

  <Task commandLine="MyBackground.cmd" executionContext="elevated" taskType="background">
  </Task>


这是可行的。

我们在WebRoles上使用OnStart作为我们的产品,它还不错。您可以创建自己的小启动工厂,在blob存储上具有powershell脚本,然后当云服务启动时,它们会同步脚本,您还可以将配置存储在blob存储中,以便运行脚本。通过这种方式,您可以很容易地为将来创建的Web角色更新和维护启动体验。但启动任务将在安装IIS之前运行。我们的一个产品实际上是在OnStart中清理IIS,并从blob存储中进行我们自己的网站设置。@pksorensen我不想使用OnStart的原因是这取决于C。如果我错了,请纠正我。您可以从c#启动进程或运行powershell脚本。