设为首页 收藏本站
查看: 1309|回复: 0

[经验分享] Windows Azure Cloud Service (8) Role及其生命周期模型

[复制链接]

尚未签到

发表于 2015-5-23 07:26:08 | 显示全部楼层 |阅读模式
  《Windows Azure Platform 系列文章目录》
  
  我们浏览Windows Azure项目。如下图所示
DSC0000.jpg
  可以看到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来查看运行结果。
DSC0001.jpg
  对于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类。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-69668-1-1.html 上篇帖子: 在Windows Azure虚拟机上开发Windows 8 应用 下篇帖子: 使用Windows Azure Mobile Service开发Windows Phone 8 App
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表