在开始本教学之前,请确保你从Windows Azure 平台下载下载并安装了最新的Windows Azure开发工具。本教学使用Visual Studio 2010作为开发工具。

步骤一:创建解决方案和项目

以管理员权限启动Visual Studio 2010,并且新建一个Windows Azure Project项目。

在弹出窗口出现后,按照下图所示,分别点击Worker Role,“>”按钮。该步骤会在右边窗口中生成一个新的Worker Role项。当你把鼠标移动至该Worker Role项之上时,会出现两个图标。点击左边的铅笔图标,你就可以修改Worker Role的名字;点击右边的叉形图标则可以移除该Role。决定了Role的种类,数量,以及名字之后,点击OK以创建解决方案。

步骤二:观察并分析生成的项目

项目结构如下图所示:

其中自动被设置成启动项目的是一个Cloud Service项目,你可以通过蓝色圆球图标来识别一个Cloud Service项目。单纯的一个Cloud Service项目只是一个Role的载体,针对每个Role,Visual Studio也会为你创建一个对应的项目,例如,为Worker Role生成的就是一个Class Library项目。无论何时,请确保Cloud Service项目是启动项目。

打开WorkerRole.cs文件,并且观察WorkerRole类:

双击代码全选
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public class WorkerRole : RoleEntryPoint
  
{
  
    public override void Run()
  
    {
  
        // This is a sample worker implementation. Replace with your logic.
  
        Trace.WriteLine("SimpleWorkerRole entry point called", "Information");
  
   
  
        while (true)
  
        {
  
            Thread.Sleep(10000);
  
            Trace.WriteLine("Working", "Information");
  
        }
  
    }
  
   
  
    public override bool OnStart()
  
    {
  
        // Set the maximum number of concurrent connections
  
        ServicePointManager.DefaultConnectionLimit = 12;
  
   
  
        // For information on handling configuration changes
  
        // see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357.
  
   
  
        return base.OnStart();
  
    }
  
}

每个Worker Role都包含一个WorkerRole类,作为程序的入口点,类似于Console项目中的Program类。这个类必须继承自RoleEntryPoint,并且必须被命名为WorkerRole。

WorkerRole.OnStart方法可以被类比成Console程序中的Main方法,它会在一个Role启动时被调用,通常被用于做一些初始化工作。默认生成的代码为你初始化了诊断(Diagnostics)以及配置相关的代码。

WorkerRole.Run方法会在一个Worker Role初始化完毕,开始运行时被调用。一旦Run方法被跳出,一个Worker Role就会被终止(你可以重写OnStop方法来做一些善后工作,这个方法并没有被自动生成)。

通常Worker Role被用于批量处理任务,所以自动生成的代码的控制逻辑中包含了一个无限循环,每个循环用于处理单个任务,在处理之前当前线程会睡上10秒。请注意你并不一定要跟着自动生成的控制逻辑走,你完全可以修改生成的代码,来撰写你自己的控制逻辑。例如,你也许会创建一个定时器,每隔一定时间来执行一个任务。

本文假设你并未修改自动生成的代码,自动生成的代码执行的任务就是每隔10秒纪录一条Trace信息。

步骤三:运行程序

现在我们已经可以在Windows Azure模拟器中运行这个Worker Role程序了。在第一篇教学中,我们已经让大家认识了Windows Azure模拟器,在今后的文章中还会有更详细的说明,这里省略相关内容。

按下F5开始调试程序,在任务栏中找到Windows Azure模拟器的图标,右键点击该图标,点击Show Compute Emulator UI打开UI界面。

项目启动后,每隔10秒,你都会看到一句Information: Working的消息,这就说明我们的Worker Role中在顺利运行中:

请注意发布之后观察Trace信息的方式和在Windows Azure模拟器中是不一样的。有关详细信息,我们会在今后的文章中说明。

Windows Azure入门教学系列 (三):创建第一个Worker Role程序的更多相关文章

  1. Windows Azure入门教学系列 (一): 创建第一个WebRole程序

    原文 Windows Azure入门教学系列 (一): 创建第一个WebRole程序 在第一篇教学中,我们将学习如何在Visual Studio 2008 SP1中创建一个WebRole程序(C#语言 ...

  2. Windows Azure中文博客 Windows Azure入门教学系列 (一): 创建第一个WebRole程序

    http://blogs.msdn.com/b/azchina/ 本文转自:http://blogs.msdn.com/b/azchina/archive/2010/02/09/windows-azu ...

  3. Windows Azure入门教学系列 (七):使用REST API访问Storage Service

    本文是Windows Azure入门教学的第七篇文章. 本文将会介绍如何使用REST API来直接访问Storage Service. 在前三篇教学中,我们已经学习了使用Windows Azure S ...

  4. Windows Azure入门教学系列 (二):部署第一个Web Role程序

    本文是Windows Azure入门教学的第二篇文章. 在第一篇教学中,我们已经创建了第一个Web Role程序.在这篇教学中,我们将学习如何把该Web Role程序部署到云端. 注意:您需要购买Wi ...

  5. Windows Azure入门教学系列 (九):Windows Azure 诊断功能

    本文是Windows Azure入门教学的第九篇文章. 本文将会介绍如何使用Windows Azure 诊断功能.跟部署在本地服务器上的程序不同,当我们的程序发布到云端之后,我们不能使用通常的调试方法 ...

  6. Windows Azure入门教学系列 (六):使用Table Storage

    本文是Windows Azure入门教学的第六篇文章. 本文将会介绍如何使用Table Storage.Table Storage提供给我们一个云端的表格结构.我们可以把他想象为XML文件或者是一个轻 ...

  7. Windows Azure入门教学系列 (五):使用Queue Storage

    本文是Windows Azure入门教学的第五篇文章. 本文将会介绍如何使用Queue Storage.Queue Storage提供给我们一个云端的队列.我们可以用Queue Storage来进行进 ...

  8. [转]Windows Azure入门教学系列 (六):使用Table Storage

    本文转自:http://blogs.msdn.com/b/azchina/archive/2010/03/11/windows-azure-table-storage.aspx 本文是Windows ...

  9. Windows Azure入门教学系列 (四):使用Blob Storage

    本文将会介绍如何使用Blob Storage.Blob Storage可以看做是云端的文件系统.与桌面操作系统上不同,我们是通过REST API来进行对文件的操作.有关REST API的详细信息,请参 ...

随机推荐

  1. BitNami Redmine Stack

    BitNami Redmine Stack 是打包了 Redmine 的一键安装程序包,包括:Apache, MySQL, Ruby On Rails, and Subversion Redmine ...

  2. C++ 自定义结构体和类 内存对齐

    为什么要提出内存对齐? 比如这么一种处理器,它每次读写内存的时候都从某个8倍数的地址开始,一次读出或写入8个字节的数据,假如软件能保证double类型的数据都从8倍数地址开始,那么读或写一个doubl ...

  3. grub2的/etc/default/grub文件详解

    # If you change this file, run 'update-grub' afterwards to update# /boot/grub/grub.cfg.GRUB_DEFAULT= ...

  4. PyQt中登录框设计

    很多软件,比如QQ,亦或一些管理系统,运行之后都会先弹出一个登录框,只有登录成功了,才能进入软件主界面. 以前在邮件列表中回答过如何做登录框,这里重新整理下. 从刚开始做Delphi的时候就有不少人纠 ...

  5. linux学习: sudo命令(ubuntu)

    使用 sudo 命令可以提高命令的执行权限,以root权限执行 如 :  sudo vi xxx 但是有些内置命令 如 cd 无法通过 sudo来执行 ,如  sudo cd xxx 这是会报错的. ...

  6. cglib源码学习交流

    背景 前段时间在工作中,包括一些代码阅读过程中,spring aop经常性的会看到cglib中的相关内容,包括BeanCopier,BulkBean,Enancher等内容,以前虽大致知道一些内容,原 ...

  7. spider-web 是爬虫的网页版,使用xml配置

    spider-web 是爬虫的网页版,使用xml配置,支持大部分页面的爬取,支持爬取内容的保存.下载等. 其中配置文件格式为: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1 ...

  8. 还是回文(dp)

    还是回文 时间限制:2000 ms  |  内存限制:65535 KB 难度:3 描述 判断回文串很简单,把字符串变成回文串也不难.现在我们增加点难度,给出一串字符(全部是小写字母),添加或删除一个字 ...

  9. div无法触发blur事件解决的方法

    默认情况下div无法获取焦点,无法触发focus与blur事件,推測span,a等标签也无法触发焦点事件(input:button.及button标签能够触发) 怎样使div触发blur事件:能够给d ...

  10. 管理tips

    管理是什么? 我认为达到的目的就是高效.低成本. 成本低才能有盈余,才能活的长和舒服.高效就是无谓的消耗少,以结果为导向. 开源节流,应该包含显性的与隐性的两方面. 隐性成本: 1.会议成本;2.沟通 ...