【问题标题】:Will ASP.NET catch exception thrown in WebRole class?ASP.NET 会捕获 WebRole 类中抛出的异常吗?
【发布时间】:2011-08-21 12:04:42
【问题描述】:

我想我在某处读到,WebRole 在与 Windows Azure 上的 IIS 不同的进程中运行,从而可以将 Web 和 Worker 角色结合起来http://things.smarx.com/#Combine%20Web%20and%20Worker%20Roles

假设以下通用代码:

public class WebRole : RoleEntryPoint
{
    public override void Run()
    {
         ... Exception gets thrown here.
    }
}

这是否需要单独的异常处理方法? Run 是否与 OnStart 不同,意味着某些服务已启动? 有什么最佳做法吗?

【问题讨论】:

    标签: asp.net asp.net-mvc azure


    【解决方案1】:

    题名和内联题不同——你最关心哪一个?

    1.3+ SDK 中的 WebRole 可以运行完整的 IIS,它在与 RoleEntryPoint 不同的进程下运行。这意味着出于异常处理目的,RoleEntryPoint 和 IIS Web 应用程序是完全隔离的。您需要在每个中进行明确的错误处理,因为其中一个不适用于另一个。

    您提出的另一个问题与 Run 与 OnStart 有关。在您的实例连接到 LoadBalancer 之前调用 OnStart 方法。这是您在活跃流量到达之前通过您需要做的任何事情来引导角色的机会。您必须返回 true 并且不要在 OnStart 中抛出错误,否则您将永远无法获得活动实例。有些人使用 OnStart 以编程方式创建他们需要的 IIS 内容(站点、应用程序、vdir 等)。 Run 方法是主要工作逻辑的入口点。它就像 static void Main() (但你永远不会退出)。

    现实情况是,Web 角色和 Worker 角色几乎相同,唯一的例外是 Web 角色现在有一些很好的声明性语法可以为您设置 IIS。使用 RoleEntryPoint 时,所有其他在工作角色中运行的注意事项都适用于 Web 角色。

    【讨论】:

    • 太好了,谢谢。我想有多个问题,因为我不确定它们是否实际上是 2 个独立的过程。感谢您提供额外的见解,它会有所帮助。 Azure 的发展速度非常快,这很好,但是当示例和文档有点落后时,这也变得很困难。再次感谢。
    【解决方案2】:

    RoleEntyPoint 在 ASP.Net 运行时被初始化之前被初始化。据我记得,如果 Run 方法抛出异常,角色会回收,您可以在 Azure 管理门户中看到。有关一些提示,请参阅this

    【讨论】:

      猜你喜欢
      • 2011-12-05
      • 1970-01-01
      • 2013-06-24
      • 2010-10-14
      • 1970-01-01
      • 2017-10-14
      • 1970-01-01
      • 2016-02-17
      相关资源
      最近更新 更多