我以为我在某处看到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不同,这意味着某些服务已经启动? 任何最佳做法?
答案 0 :(得分:2)
问题的标题和内联问题是不同的 - 你最关心哪一个?
1.3+ SDK中的WebRole可以运行完整的IIS,它在与RoleEntryPoint不同的进程下运行。这意味着,出于异常处理的目的,RoleEntryPoint和IIS Web应用程序是完全隔离的。你需要在每个中都有明确的错误处理,因为一个不适用于另一个。
您提出的另一个问题与Run vs OnStart有关。在将实例连接到LoadBalancer之前调用OnStart方法。这是您在活动流量到达之前用任何您需要做的事情来引导角色的机会。您必须返回true并且不在OnStart中抛出错误,否则您将永远不会获得活动实例。有些人使用OnStart以编程方式创建他们需要的IIS内容(网站,应用程序,vdirs等)。 Run方法是主工作逻辑的入口点。它就像静态void Main()(但你永远不会退出)。
现实情况是Web和Worker角色几乎相同,唯一的例外是Web角色现在有一些很好的声明性语法来为您设置IIS。使用RoleEntryPoint时,worker角色中runnig的所有其他警告都适用于Web角色。
答案 1 :(得分:1)
在ASP.Net运行时初始化之前,RoleEntyPoint会初始化。据我所知,如果Run方法抛出异常,角色将会回收,您可以在Azure管理门户中看到它。有关提示,请参阅this。