Chinaunix首页 | 论坛 | 博客
  • 博客访问: 94949
  • 博文数量: 50
  • 博客积分: 1424
  • 博客等级: 上尉
  • 技术积分: 430
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-17 09:48
文章分类
文章存档

2010年(50)

我的朋友
最近访客

分类: WINDOWS

2010-05-17 10:10:37

本文是Windows Azure入门教学的第三篇文章

本文将会引导大家创建一个简单的Worker Role程序,并且部署在Development Fabric中。

你可以使用Visual Studio 2008 SP1或者Visual Studio 2010(目前处于Release Candidate阶段)。为了说明我们同样能够在VS 2010中开发,与前两篇教学不同,本文将使用VS 2010,但是绝大多数的步骤对于VS 2008也是等效的。

请确保自己的机体上安装了最新版的Windows Azure Tools for Microsoft Visual Studio。当前的最新版(20102月)可以从以下站点下载:

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

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

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

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

项目结构如下图所示:

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

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

       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;

 

                     DiagnosticMonitor.Start("DiagnosticsConnectionString");

 

                     // For information on handling configuration changes

                     // see the MSDN topic at

                     RoleEnvironment.Changing += RoleEnvironmentChanging;

 

                     return base.OnStart();

              }

 

              private void RoleEnvironmentChanging(object sender, RoleEnvironmentChangingEventArgs e)

              {

                     // If a configuration setting is changing

                     if (e.Changes.Any(change => change is RoleEnvironmentConfigurationSettingChange))

                     {

                           // Set e.Cancel to true to restart this role instance

                           e.Cancel = true;

                     }

              }

       }

 

每个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信息。

步骤三:运行程序

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

按下F5开始调试程序,在任务栏中找到Development Fabric的图标(请参考我们的第一篇教学(http://blogs.msdn.com/azchina/archive/2010/02/09/windows-azure-webrole.aspx),右键点击该图标,点击Show Development Fabric UI打开UI界面。

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

请注意发布之后观察trace信息的方式和在Development Fabric中是不一样的。有关详细信息,我们会在今后的文章中说明。

阅读(481) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~