《Windows Azure Platform 系列文章目录》

    

我们浏览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类。

  一般情况下,我们可以在WebRole.cs的OnStart()函数中,执行初始化的逻辑。

  在WebRole.cs的Run()函数中,执行需要持久化运行的逻辑,比如后台运行的Windows Service等等。

Windows Azure Cloud Service (8) Role及其生命周期模型相关推荐

  1. Windows Azure Cloud Service (17) Role Endpoint

    <Windows Azure Platform 系列文章目录> 在Windows Azure平台中,用户最多可以对以个Role指定5个Endpoint.而一个Hosted Service最 ...

  2. [New Portal]Windows Azure Cloud Service (33) 使用Visual Studio 2012 部署Cloud Service

    <Windows Azure Platform 系列文章目录> 笔者已经将工作用的笔记本电脑升级到Windows 8很长一段时间了,开发工具也从Visual Studio 2010升级到了 ...

  3. Windows Azure Cloud Service (39) 如何将现有Web应用迁移到Azure PaaS平台

    <Windows Azure Platform 系列文章目录> 本文将简单介绍,如何将企业内现有的ASP.NET应用程序迁移到Azure PaaS平台. 因为在迁移过程中,可能需要对现有的 ...

  4. Windows Azure Cloud Service (23) 使用Full IIS模式部署多站点和虚拟目录

    <Windows Azure Platform 系列文章目录> 本章我们将介绍如何使用Windows Azure的Full IIS模式部署多站点和虚拟目录. 首先我们先新建一个Window ...

  5. Windows Azure Cloud Service (41) 修改云服务IIS托管管道模式为4.0经典模式

    <Windows Azure Platform 系列文章目录> 这是笔者在之前的项目中遇到的问题,做一下总结,给网友做参考. 在一般情况下,Visual Studio开发的Cloud Se ...

  6. Windows Azure Cloud Service (19) 动态指定WCF的发布地址

    <Windows Azure Platform 系列文章目录> 在刚才的例子中,服务端和客户端都是通过配置文件明确指定了WCF的地址,而如果现在需要将此服务发布到别的Hosted Serv ...

  7. Windows Azure Cloud Service (27) 在Windows Azure发送邮件(上)

    <Windows Azure Platform 系列文章目录> 许多Web应用都具有发送邮件通知的功能,不管是作为用户注册流程的一部分,还是通知用户一系列重要事件的发生.如果您是一个.NE ...

  8. Windows Azure Cloud Service (1) 用户手册

    <Windows Azure Platform 系列文章目录> 下载地址 Cloud Service用户手册

  9. Windows Azure Cloud Service (24) 在模拟器中运行时跳过Windows Azure Startup任务

    <Windows Azure Platform 系列文章目录> 前一章里我们已经介绍了如何使用Windows Azure Startup来执行额外的配置任务,比如注册COM组件和注册Win ...

最新文章

  1. python3: 博客园列表爬取;
  2. Python中join 和 split详解
  3. mysql5.7配置用户名密码_Druid拦截功能的配置与简单绕过
  4. redis 缓存击穿 看一篇成高手系列 三
  5. 我对模拟电路课程的理解
  6. Java 14:记录
  7. 设置TextView为下划线的样式
  8. OSChina 周四乱弹 —— 要成立复仇者联盟了,来报名
  9. 前端学习(2247)为什么用git-new
  10. 520晚上,我用python破解了前女友的加密文件,结果却发现。。。
  11. 说实话,我主要是冲着奖金来的
  12. 面试Java岗位时,总被面试题困扰,分享企业爱用的面试题
  13. ssq爬取【20210618有效】
  14. 将SVG 转换为png -- ImageMagick 转换 svg 为透明png 图
  15. 引用计数与可达性分析
  16. 华为android版本7.0,永不卡!华为手机全面升级安卓7.0:逆天
  17. 洛谷 P1194 买礼物 (题解+代码)
  18. 无法解析的外部符号 “public: static void __cdecl std::_String_base::_Xran(void)“
  19. 有N个人围成一圈,从第一个人开始报数,数到3的人出列,直到最后一个人,问他的编号
  20. IOP测试 -- 互操作性原型测试 -- 蓝牙设备互联

热门文章

  1. 2015年蓝桥杯省赛A组c++第4题
  2. Windows系统安装教程
  3. JAVA常用的XML解析方法
  4. 让页面在打开时自动刷新
  5. python 函数对象(函数式编程 lambda、map、filter、reduce)、闭包(closure)
  6. 【Datapump】expdp和impdp中parallel参数解释
  7. 《空中交通管理基础》-潘卫军主编-第三章-航空器和飞行高度层
  8. 基于XAMPP的Testlink安装方法
  9. HDU 1222 Wolf and Rabbit(gcd)
  10. Web下的整体测试 --性能测试及优化思路