《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等等。

 


本文转自Lei Zhang的博客博客园博客,原文链接:http://www.cnblogs.com/threestone/archive/2012/03/06/2380214.html,如需转载请自行联系原作者
目录
相关文章
|
3月前
|
BI Windows Python
python报表自动化系列 - 在Windows中打开指定目录
python报表自动化系列 - 在Windows中打开指定目录
31 1
|
7月前
|
Windows
Windows常见可读写目录的探测
Windows常见可读写目录的探测
95 0
Windows常见可读写目录的探测
|
7月前
|
Windows
Windows基础命令(目录文件、文本、网络操作)
Windows基础命令(目录文件、文本、网络操作)
34 0
|
1月前
|
Windows
Windows 命令提示符(CMD)操作(一):文件和目录管理
Windows 命令提示符(CMD)操作(一):文件和目录管理
40 0
|
4月前
|
存储 API Windows
8.3 Windows驱动开发:内核遍历文件或目录
在笔者前一篇文章`《内核文件读写系列函数》`简单的介绍了内核中如何对文件进行基本的读写操作,本章我们将实现内核下遍历文件或目录这一功能,该功能的实现需要依赖于`ZwQueryDirectoryFile`这个内核API函数来实现,该函数可返回给定文件句柄指定的目录中文件的各种信息,此类信息会保存在`PFILE_BOTH_DIR_INFORMATION`结构下,通过遍历该目录即可获取到文件的详细参数,如下将具体分析并实现遍历目录功能。
43 0
8.3 Windows驱动开发:内核遍历文件或目录
|
5月前
|
C++ Windows
windows从右键菜单选择vscode打开当前目录项目
vscode 每次打开新项目都要先打开vscode在从里面打开目录,每次这样感觉效率比较低,就想着能不能有一个我直接在当前目录下右键菜单,点一下就直接用vscode打开当前目录,总共找到3种方案
76 0
|
7月前
|
存储 Apache 文件存储
Apache On Windows 如何使用阿里云NAS作为WEB站点目录
在Windows操作系统运行Apache WEB服务器的用户如何使用阿里云NAS共享作为WEB 站点目录。
209 0
|
8月前
|
Windows
windows通过cd命令进入具体目录
windows通过cd命令进入具体目录
|
10月前
|
Shell Linux 开发工具
Windows下如何使用tree命令生成目录树
熟悉Linux的人应该对tree命令不陌生,可以使我们对指定目录制作一种目录树的形式,就像下面这种形式。
1033 0
|
运维 大数据 Windows
【大数据开发运维解决方案】windows定期清理指定目录文件(保留指定天数日志)
定期清理windows指定目录文件 1、编辑clean.bat脚本加入下面内容: 根据实际需要替换指定目录和时间,这里只保留F:\testbat目录最近七天的所有文件。 forfiles /p "F:\testbat" /s /m *.* /d -7 /c "cmd /c del @path" 保存退出 2、加入windows定期执行计划: 在win系统中,选择计算机管理-》系统工具-》任务计划...
【大数据开发运维解决方案】windows定期清理指定目录文件(保留指定天数日志)