1. 概述

  Windows Azure 是微软的云计算平台。用于 在微软数据中心 通过全局网络 生成、发布和管理应用程序。

  本章内容包括 startup tasks 以及  实现 Start, Run 和 Stop 事件。

2. 主要内容

  2.1 Windows Azure

    ① 提供 PaaS 和 IaaS 两种服务。

    PaaS 提供一个实际的计算平台,包括 操作系统、程序执行环境、数据库 和 web服务器。

    IaaS 是提供虚拟的机器。

    ② Windows Azure 有三种类型的解决方案:虚拟机器、web站点 和 云服务。

    虚拟机器:使用方式类似本地的机器,可以进行开发测试和部署。

    web站点:单纯的web站点寄宿。可以方便的部署和运行ASP.NET MVC4站点。

    云服务:直接的PaaS模式,是Windows Azure的初始发布模型。

  2.2 Startup tasks

    2.2.1 Windows Azure中有三种角色:Web、Worker 和 VM。

      Web一般用于执行IIS。Worker一般用于执行中间层的程序。而VM角色可以完全的访问虚拟机。

    2.2.2 通过 Startup tasks,可以 注册COM组件、安装组件或者设置注册key。Startup tasks仅对Web和Worker角色可用。

      Startup tasks 在 Task元素中定义,Task元素是 ServiceDefinition.csdef文件中的Startup元素的一个节点。

      一个标准的Startup tasks是一个命令行程序或者一个批处理文件。

    2.2.3 当一个角色启动,Windows Azure中,后续的过程如下:

      ① 实例被标记为Starting,不再接收通知。

      ② Startup tasks 根据taskType属性开始执行。。(简单任务以同步方式,后台和前台任务以异步方式。)

      ③ 角色寄宿过程启动,站点在iis中被创建。

      ④ 调用 Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.OnStart 方法。

      ⑤ 实例被标记为Reader并开始接收通知。

      ⑥ 调用  Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.Run 方法。

    2.2.4  AppCmd.exe命令行工具用于在Windows Azure中,启动时管理IIS设置。

    2.2.5 Startup tasks 可以被执行多次。忘记配置AppCmd.exe工具会导致运行时错误。

    2.2.6 可以把一个任务标记为后台执行。

<Startup>
<Task commandLine="Startup\ExecWithRetries.exe
&quot;/c:Startup\AzureEnableWarmup.cmd&quot;
/d: /r: /rd: &gt;&gt; c:\enablewarmup.cmd.log
&gt;&gt;&amp;"
executionContext="elevated" taskType="background" />
</Startup>

    2.2.7 Windows Azure 虚拟机是无状态的。

  2.3 实现  Start, Run 和 Stop 事件

     OnStart 方法和 Startup tasks有许多概念上的相似点:

    ① 有相同的超时机制。

    ② 角色被回收时都会被再次执行。

    ③ 都可以配置先于角色处理。

     OnStart 方法和 Startup tasks 的不同之处包括:

    ① Startup tasks 运行在不同的进程中。适用于需要独立运行过程的软件和平台。

    ② 状态信息可以在OnStart方法和Run方法中共享,因为这两个方法在同一个应用程序域中。

    ③ Startup tasks可以被配置为后台或者前台任务,并且可以并发运行。

    当所有配置好的Startup tasks完成后,Window Azure角色开始运行。有三个主要的事件可以重写:OnStart、Run、OnEnd。

public class WorkerRole : RoleEntryPoint
{
public override bool OnStart()
{
try
{
// Add initialization code here
}
catch (Exception e)
{
Trace.WriteLine("Exception during OnStart: " + e.ToString());
// Take other action as needed.
}
return base.OnStart();
}
}
public override void Run()
{
try
{
Trace.WriteLine("WorkerRole entrypoint called", "Information");
while (true)
{
Thread.Sleep();
Trace.WriteLine("Working", "Information");
}
// Add code here that runs in the role instance
}
catch (Exception e)
{
Trace.WriteLine("Exception during Run: " + e.ToString());
// Take other action as needed.
}
}
public override void OnStop()
{
try
{
// Add code here that runs when the role instance is to be stopped
}
catch (Exception e)
{
Trace.WriteLine("Exception during OnStop: " + e.ToString());
// Take other action as needed.
}
}

    OnStop方法有5分钟强制限制。确保程序被彻底的清理。

3. 总结

  ① Windows Azure 是一个基于云的,给公司和开发者提供高度可配置、灵活部署的服务环境。

  ② Azure是无状态的。每次运行之间的数据不能被保存和共享。

  ③ 开发者可以给一个角色一系列Startup tasks去运行。这些Startup tasks可以实现 安装附加软件和第三方工具,修改注册信息以及满足Asp.Net MVC程序的其他需求。 可以使用AppCmd.exe工具去管理这些Startup tasks。

  ④ Startup tasks完成后,OnStart方法就会被调用。可以重载OnStart方法去实现其他功能。记得要返回true,否则将启动失败。

  ⑤ OnStart方法返回后(返回true),Run方法就会被调用。Run方法是void方法,可以重载它和主程序并发执行。

  ⑥ 程序结束前,会调用OnStop方法。这个方法也是一个void方法。用于清理前面两个方法的资源。

第三章 设计程序架构 之 设计实现Windows Azure 角色生命周期的更多相关文章

  1. 第六章 设计程序架构 之 设计实现WebSocket策略

    1. 概述 传统网页的通信方式是请求-响应模式,每次请求-响应都是新的连接.连接的建立和断开也是需要消耗资源的. WebSocket是基于TCP协议,实现单个连接上的双向通信. 本章内容包括: 异步读 ...

  2. 第七章 设计程序架构 之 设计HTTP模块和处理程序

    1. 概述 HTTP模块和处理程序,可以让程序员直接跟HTTP请求交互. 本章内容包括 实现同步和异步模块及处理程序以及在IIS中如何选择模块和处理程序. 2. 主要内容 2.1 实现同步和异步模块及 ...

  3. 第十一章 管理类型(In .net4.5) 之 管理对象的生命周期

    1. 概述 本章内容包括 管理非托管资源.使用IDisposable接口 以及 管理析构器和垃圾回收. 2. 主要内容 2.1 理解垃圾回收机制 ① 代码执行的时候,内存中有两个地方存放数据项:堆 和 ...

  4. 精通AngularJS(三)深入scope,继承结构,事件系统和生命周期

    深入探讨 Scope 作用域 每一个 $scope 都是类 Scope 的一个实例.类 Scope 拥有可以控制 scope 生命周期的方法,提供事件传播的能力,并支持模板渲染. 作用域的层次结构 让 ...

  5. Java-Maven(三):Maven坐标、Maven仓库、Maven生命周期

    之前通过学习对maven命令有了部分了解,但是只是知道maven是用来做什么.但到目前位置还不足以全面的了解maven,为更全面的了解maven,需要学习以下几个概念:Maven坐标.Maven仓库. ...

  6. 三张图让你高速明确activity与fragment生命周期的异同点

    第一张图:activity的生命周期 第二张图:fragment的生命周期 第三张图:activity与fragment生命周期对照 补充:假设你还是不明确,请翻译一下你不理解的相应单词. ----- ...

  7. 第三章 IP地址规划设计技术(很重要)

    知识重点: 选择题考点 IP基础(网络地址.子网掩码) 网络地址转换 NAT 的原理 CIDR (计算方法) IPv6 地址表示 综合题 IP地址的分类与计算 VLSM 地址规划 3.1 基础知识 3 ...

  8. 第三章:ionic环境搭建之windows篇

    下面是在windows操作系统上面安装ionic的步骤,已经在Windows 10/ 7/ XP下面通过验证. 安装JDK 1.1 下载(http://www.oracle.com/technetwo ...

  9. 《深入理解bootstrap》读书笔记:第二章 整体架构

    一.  整体架构   1. CSS-12栅格系统 把网页宽度均分为12等分(保留15位精度)--这是bootstrap的核心功能. 2.基础布局组件 包括排版.按钮.表格.布局.表单等等. 3.jQu ...

随机推荐

  1. 移植ok6410

    tftp u-boot.bin http://blog.csdn.net/link_hui/article/details/5593518 LED driver http://blog.csdn.ne ...

  2. 海外支付:抵御信用卡欺诈的CyberSource

    海外支付:抵御信用卡欺诈的CyberSource 吴剑 2014-06-04 原创文章,转载必需注明出处:http://www.cnblogs.com/wu-jian 吴剑 http://www.cn ...

  3. android Json 解析和生成

    什么是json: JSON即JavaScript Object Natation的简称,它是一种轻量级的数据交换格式,非常适合服务器与JavaScript的交互.JSON易于人阅读和编写.同时也易于机 ...

  4. g++/gcc 链接头文件 库 PATH

    转自http://blog.csdn.net/kankan231/article/details/24243871 在Linux下编译链接或运行c/c++程序时可能会遇到找不到头文件,找不到库文件的错 ...

  5. VS2015+win10+opencv3.0整个安装过程

    LZ最近换了台新台式电脑,开始下载新VS软件,话说软件平台越新越好用,一看网上已经有VS2015版本,果断就去官网下载. 1.安装VS操作 官方网的链接如下:https://www.visualstu ...

  6. Flex4+BlazeDS+JAVA+MySql 构建J2EE工程 对用户信息进行管理实例

    要求 必备知识 本文要求基本了解 Adobe Flex编程知识和JAVA基础知识. 开发环境 MyEclipse10/Flash Builder4.6/Flash Player11及以上 演示地址 演 ...

  7. oracle通过DBlink连接mysql(MariaDB)

    1.安装先装 mysql-connector-odbc(或 mariadb-connector-odbc )和unixODBChttps://downloads.mariadb.org/mariadb ...

  8. USACO Section 2.3 奶牛家谱 Cow Pedigrees

    OJ:http://www.luogu.org/problem/show?pid=1472 #include<iostream> using namespace std; const in ...

  9. EXE中释放文件

    今天有个朋友问到VC能否释放多个EXE.DLL或WAV等文件,我便做了个实例给他. (注意:以下释放资源代码是不受文件扩展名所限制的,你可以释放更多类型文件) 下面是我写了个很方面的函数给大家用! 1 ...

  10. CLRS:build_max_heap(strorage in array)

    //用满二叉树存储,从n/2处开始递归向上调整(n/2后均为叶子节点,无需调整)使得根最大 //满二叉树顺序存储,左子2i,右子2i+1: #include<stdio.h>#includ ...