技术开发 频道

Windows Azure入门:创建WorkerRole程序

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

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

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

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

 

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

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

  项目结构如下图所示:

  其中自动被设置成启动项目的是一个Cloud Service项目,你可以通过蓝色圆球图标来识别一个Cloud Service项目。单纯的一个Cloud Service项目只是一个roles的载体,针对每个Role,Visual 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 http://go.microsoft.com/fwlink/?LinkId=166357.

                     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中在顺利运行中:

0
相关文章