全部博文(50)
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。当前的最新版(2010年2月)可以从以下站点下载:
以管理员权限启动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
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中是不一样的。有关详细信息,我们会在今后的文章中说明。