WEB开发网
开发学院服务器云计算 Windows Azure Platform (十三) Role及其生命周期... 阅读

Windows Azure Platform (十三) Role及其生命周期模型

 2012-03-22 12:07:54 来源:WEB开发网   
核心提示:我们浏览Windows Azure项目,如下图所示可以看到Windows Azure的项目包含传统的ASP.NET工程文件,Windows Azure Platform (十三) Role及其生命周期模型,如Default.aspx和Global.asax等,但是又多了一些东西:名为 WeRole.cs的文件,从Glo

我们浏览Windows Azure项目。如下图所示

可以看到Windows Azure的项目包含传统的ASP.NET工程文件,如Default.aspx和Global.asax等。但是又多了一些东西:名为 WeRole.cs的文件。其中定义了一个名为WebRole的类,它派生自RoleEntryPoint这个在Windows Azure SDK中定义的基类。

RoleEntryPoint这个类定义在Microsoft.WindowsAzure.ServiceRuntime命名空间中,位于 Assebly Microsoft.WindowsAzure.ServiceRuntime.dll这个文件里面。它随着Windows Azure SDK安装到开发计算机中。

Microsoft.WindowsAzure.ServiceRuntime这个命名空间主要提供了对Windows Azure平台运行时的支持,开发人员可以通过它提供的一系列类来获取或设置Windows Azure平台以及运行在其上的Role, Instance等相关属性。其中RoleEntryPoint这个类主要负责Role的生命周期管理。

当一个Role被部署到Windows Azure平台的时候,Windows Azure底层的Fabric Controller会首先基于CSDEF文件分配指定类型的虚拟机,然后讲部署包解压缩到指定的目录。如果是Web Role的话,Fabric Controller将会配置IIS中的网站;如果是Worker Role的话,Fabric Controller会启动特殊的寄宿进程来运行Worker Role代码。最后,Fabric Controller搜索Role里面派生自RoleEntryPoint的类,通过调用下面几个方法对Role进行启动和停止操作。

  • OnStart方法: Role启动的时候被调用。 OnStart方法中加入的代码可以处理一些在Role启动时的初始化工作。当返回True的时候表示启动成功,否则表示启动失败。如果在调用过程中出现未捕获的异常则会引发Role的重新启动。
  • Run方法:包含Role所执行的业务逻辑操作。Run方法在实现的时候必须是一个无限循环的逻辑,以保证部署之后Role始终处于运行状态。和OnStart一样,任何在Run方法中出现的未捕获异常都会引发Role的重新启动。
  • OnStop方法:包含Role停止时的逻辑。OnStop中的代码可供处理一些在Role停止的时候需要执行的收尾或回收工作,例如关闭数据库连接、关闭文件等。需要注意的是,Fabric Controller会判断Role关闭的时候是否超市(30秒)。因此在OnStop里面加入的业务逻辑需要在这个超时范围之内完成,否则将会被视作异常。同样的,任何在OnStop方法中抛出的异常也会引发Role的重新启动。

在Visual Studio中打开WebRole.cs文件便可以看到Windows Azure模板创建的默认内容。可以在OnStart、Run和OnStop方法中加入一些调试信息来检验上述方法何时被调用,以及对应的状态值。

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.Diagnostics;
using Microsoft.WindowsAzure.ServiceRuntime;
using System.Diagnostics;

namespace WebRole1
{
    public class WebRole : RoleEntryPoint
    {
        public override bool OnStart()
        {
            // For information on handling configuration changes
            // see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357.

            Trace.WriteLine("Role Instance Start!");
            return base.OnStart();
        }

        public override void Run()
        {
            Trace.WriteLine("Role Instance is Running!");
            base.Run();
        }

        public override void OnStop()
        {
            Trace.WriteLine("Role Instance is Stop!");
            base.OnStop();
        }
    }
}

在本地模拟器中运行此代码,可以看到部署好项目之后Windows Azure模拟器自动打开浏览器展示这个网站。我们可以选择Show Compute Emulator UI来查看运行结果。

对于Worker Role而言,Windows Azure项目也会自动生成一个名为WorkerRole.cs的文件,它定义了一个名为WorkerRole的类,同样派生自 RoleEntryPoint。而WorkerRole的内容和WebRole稍有不同,但是原理、调用次序和生命周期模型都是一样的。

这里需要提示的是,对于一个Worker Role而言这个WorkerRole类是必不可少的。Fabric Controller需要这个类来确定如何调用并运行当前的Worker Role。但是对于Web Role而言,WebRole这个类是可选的。也就是说Windows Azure Web Role是可以在没有派生自RoleEntryPoint的WebRole类的情况下在Windows Azure平台运行。在这种情况下,Fabric Controller会直接启动ASP.NET的管道模型,从Global.asax文件的Application_Start方法启动网站。但是如果应用程序需要Web Role在启动网站之间完成一些操作,则必须创建这个WebRole类。

去问一下,你就知道

Tags:Windows Azure Platform

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接