【问题标题】:Azure: Combining web and worker role: App pool recycleAzure:结合 Web 和辅助角色:应用程序池回收
【发布时间】:2011-11-14 18:31:08
【问题描述】:

我打算在 Azure 中进行一些轻量级的后台处理。我已经有一个 webrole 正在运行,并且想使用相同的角色,这样我就不必为此使用(并支付!)专门的工作人员角色。

我读过我可以简单地覆盖 WebRole 类中的 Run(),它派生自 RoleEntryPoint,并在那里实现我的“穷人的调度”。它应该定期从队列中获取消息并进行处理。

现在我的问题是:WebRole 是否在自己的进程或线程中运行,或者更重要的是,当应用程序池/应用程序域被回收时,WebRole 会发生什么?

【问题讨论】:

    标签: azure background-process azure-web-roles azure-queues


    【解决方案1】:

    如果您在完整 IIS 模式下运行(可从 1.3 SDK 开始),则 RoleEntryPoint 和 IIS 处于不同的进程中。如果您的 ServiceDefinition 中有 <Sites> 元素,您将知道您使用的是完整 IIS 模式。

    IIS 实际上在 w3wp.exe 中运行您的网站(就像您通常期望的那样),因为它是自己的 appPool。 RoleEntryPoint 代码由一个完全不同的进程启动并作为其父进程,因此它们之间没有联系(例如,崩溃一个不会影响另一个)。

    【讨论】:

    • 嗯,最后一个括号子句并不完全正确。如果您的 RoleEntryPoint 崩溃,Windows Azure 将重新启动角色实例,这反过来又会重新启动您的 IIS 网站。
    • @smarx - 好点。我在想更多相反的情况 - 网站崩溃。
    • 此外,对于“当应用程序池/应用程序域被回收时 WebRole 会发生什么”的问题 - 当 AppPool 被回收时,WebRole 不会发生任何事情。
    • 谢谢大家的解释!
    【解决方案2】:

    添加到@dunnry 的答案;同样有趣的是,在此文件夹中的程序集副本上调用 run:

    e:\approot\bin
    

    而 IIS 指向此文件夹中您的应用程序的另一个副本:

    e:\siteroot\0
    

    【讨论】:

      猜你喜欢
      • 2016-02-06
      • 1970-01-01
      • 2014-08-29
      • 1970-01-01
      • 1970-01-01
      • 2015-07-07
      • 1970-01-01
      • 1970-01-01
      • 2014-11-09
      相关资源
      最近更新 更多