技术开发 频道

微软云计算 Windows Azure“腾云驾雾”

 Worker Role:批量处理任务

  WorkerRole程序通常为了配合WebRole程序,用于批量处理任务,扮演后台进程的角色。比如WorkerRole用于视频处理等等。要本地运行WorkerRole,需要Windows Azure模拟器的支持,因此也需要安装Windows Azure SDK。

  从代码结构的角度,每个Worker Role都包含一个WorkerRole类,作为程序的入口点。WorkerRole类必须继承自RoleEntryPoint,并且必须被命名为WorkerRole。

public class WorkerRole : RoleEntryPoint

  {

  
// WorkerRole.Run方法会在一个Worker Role初始化完毕,开始运行时被调用。一旦Run方法被跳出,

  
//一个Worker Role就会被终止

  
public override void Run()

  {

  
// 此处仅作为示例程序,请替换您的代码逻辑。

  Trace.WriteLine(
"SimpleWorkerRole entry point called", "Information");

  }

  
//WorkerRole.OnStart方法可以被类比成Console程序中的Main方法,它会在一个Role启动时被调用

  
//通常被于做一些初始化工作。

  
public override bool OnStart()

  {

  return base.OnStart();

  }

  }

  当然,你可以重写OnStop方法来做一些善后工作,这个方法并没有被自动生成。

  VM Role:Windows Server 2008 R2镜像

  VMRole,从字面意思讲,扮演的是虚拟机的角色,指的是Windows Server 2008 R2镜像,通常用于将Windows Server应用程序迁移到Windows Azure平台。

  2. Windows Azure Storage

  Windows Azure的存储模块“Windows Azure Storage”支持三种数据模型,如图所示,分别为Blob,Table,Queue。通过标准的HTTP URI提供数据访问。

  Blob

  众所周知,Blob用于存储二进制文件,Blob Storage可以看做是云端的文件系统。Windows Azure提供的Blob服务结构图如下。Account指的是云端存储服务账户。Container是Blob的集合,任何一个Blob文件必须对应一个Container,如果没有则需要创建。Blob又分为按照顺序与随机存储又分为Page与Block两种类型。

  为便于理解,我们演示如何创建一个Blob对象。代码逻辑如下:

  1. 取得存储服务账户

  2. 确保container创建,如果没有,创建container

  2. 新建一个blob,内容为"Hello World"

  3. 读取并显示blob内容

  4. 删除blob

  与桌面操作系统上不同,我们是通过REST API来进行对文件的操作。有关REST API的详细信息,请参见Blob 服务 API。Main方法中加入如下代码 (请确保已安装Windows Azure SDK):

 static void Main(string[] args)

  {

  
// 我们使用的本地的Development Storage自带账户而不是真正的云端存储服务账户

  var storageAccount
= CloudStorageAccount.DevelopmentStorageAccount;

  var blobclient
= storageAccount.CreateCloudBlobClient();

  
// 检查container是否被创建,如果没有,创建container

  var container
= blobclient.GetContainerReference("mycontainer");

  container.CreateIfNotExist();

  
// 新建一个blob,内容为"Hello double life"

  var blob
= container.GetBlobReference("myfile");

  blob.UploadText(
"Hello double life!");

  
// 读取并显示blob内容

  var blobcontent
= blob.DownloadText();

  Console.WriteLine(blobcontent);

  
// 删除blob

  var succeed
= blob.DeleteIfExists();

  Console.WriteLine(succeed ?
"Delete Succeed" : "Delete Failed");

  Console.ReadLine();

  }

 

0
相关文章