实战:在Azure开发平台上创建并运行项目

日期: 2010-06-02 来源:TechTarget中国 英文

Azure Cloud Fabric和Azure存储服务不支持基于云的开发和调试操作,因此Azure SDK提供了Development Fabric(DF)和Development Storage(DS)用于本地开发,它们会随Azure SDK一起安装,此外,Azure SDK也提供了一些示例程序和开发库以简化编程。

  Development Fabric

  DF包括以下可执行文件:DFAgent.exe,DFLoadBalancer.exe,DFMonitor.exe和DFService.exe,Azure SDK安装程序默认将它们安装在开发计算机的ProgramFilesWindowsAzureSDKv1.0bindevfabric文件夹下,启动DF后,在Windows任务管理器的进程管理列表中可以看到这四个进程,启动DF的方法有三种:

  1、通过开始菜单ProgramsWindowsAzureSDKDevelopment Fabric启动DF服务和UI(DFUI.exe)。

  2、在任务栏通知区域DF图标上点击右键,选择“启动Development Fabric服务”,如图1所示。

Azure开发平台

  图1.通过任务栏DF图标查看DF运行状态,启动DF服务

  3、在Visual Studio中编译并运行一个Azure应用程序。

  图2显示了Visual Studio 2008中两个并行调试Web应用程序(叫做Service Deployments)的DFUI,DF自动给这两个应用程序做了连续的编号(616和617),当你停止调试后,DFUI窗口中对应的应用程序项目就会消失。

Azure开发平台 

  图2.在DFUI窗口中查看Visual Studio 2008中调试的应用程序

  Development Storage

  Windows Azure Platform支持三种可扩展的持久化存储:

  1、非结构化数据(Blob)

  2、结构化数据(Table)

  3、应用程序之间,服务之间,或应用程序与服务之间的消息(Queue)

  运行rundevstore.exe或在Visual Studio中运行Azure用户代码将启动这三个服务,即使你的项目只需要其中一个服务,同时还会显示DS UI窗口,如图3所示。

Azure开发平台 

  图3.DS UI窗口,可查看每个存储服务的运行状态

  为了保证数据的安全,Azure云至少会在同一数据中心三个独立的容器中存储Blob,Table和Queue,Azure基于地理位置的功能允许你将数据复制到多个微软数据中心,增强灾难恢复能力,提高特定地区的性能。

  Azure服务定义和服务配置文件

  运行在Development Framework中的Azure应用程序可以访问存储在本地Development Storage中的数据,也可以将数据上传到Azure云存储。

  Azure项目的ServiceDe?nition.csdef文件定义了一套标准的输入端点,ServiceCon?guration.cscfg文件存储了对应的设置,清单1显示了默认的ServiceDe?nition.csdef内容。

  清单1. 默认ServiceDe?nition.csdef文件的内容

  >

  清单2显示了默认ServiceCon?guration.cscfg文件的内容。

  清单2. 默认ServiceCon?guration.cscfg文件的内容

  >

  下面是ServiceCon?guration.csfg文件中默认配置元素的定义:

  · Instances count是当你部署应用程序时,Cloud Fabric将要创建的应用程序实例数量。

  · AccountName是你分配给托管服务的存储帐户,对于DS它是devstoreaccount1。

  · AccountSharedKey是HTTP请求消息中的加密元素,叫做请求签名,它不会发送给云,对DS它是一个公共常量。

  · BlobStorageEndpoint是一个公共URI常量,对于DS它是开发计算机的环回地址(localhost = 127.0.0.1)和TCP端口10000。

  · QueueStorageEndpoint是一个公共URI常量,对于DS它是环回地址和TCP端口10001。

  · TableStorageEndpoint是一个公共URI常量,对于DS它是环回地址和TCP端口10002。

  Azure Table服务

  在DevelopmentStorage.exe打开的窗口中,选择“工具”*“Table服务属性”,选择一个SQL Server数据库名字,rundevstore.exe默认创建的数据库是ServiceHostingSDKSamples,本文将使用OakLeaf演示系统Azure Table服务示例项目的SampleWebCloudService数据库,如图4所示。

Azure开发平台 

  图4.选择SampleWebCloudService数据库

  关系数据库管理系统(RDBMS)可以通过集群实现高可靠,提高运行RDBMS的服务器性能叫做向上扩展,通过数据复制实现更多的并发访问叫做向外扩展,但数据复制通常存在一致性问题,也就是关系数据库必须遵循的ACID原则。Google BigTable,亚马逊的SimpleDB数据库,都可以通过数据复制轻松实现向外扩展,但多个分区之间数据一致性会有一段延迟时间,在对一致性要求不严格的应用中,可以利用这种特性提高系统的并发负载能力。

  图5显示了在SQL Server Management Studio 2005中Northwind数据库Customers表导入到Azure CustomerTable后的列(属性),PartitionKey和RowKey属性组成一个混合实体(对象)标识符,看作主键,新增或更新实体(行)时RDBMS更新Timestamp值,Azure将PartitionKey,RowKey(String)和Timestamp(Date)的值看作元数据,所有表中都需要这些属性,元数据值不显示,包括NextRowKey和NextPartitionKey,应用程序用它们进行数据分页。

Azure开发平台

  图5.Azure CustomerTable的列

  Table支持HTTP GET,PUT,MERGE,POST和DELETE操作,使用GET方法从云存储返回一个Table的基础URI是http://AccountName.table.core.windows.net/Tables(’TableName’),查询表达式返回过滤的实体集,如http://AccountName.table.core.windows.net/TableName$filter=QueryExpression),ADO.NET数据服务定义了查询表达式的语法,.NET客户端库(System.Data.Services.Client.dll)允许你使用LINQ标准查询操作符的子集产生包含查询表达式的URI,查询最多返回1000个实体,超过1000个实体的需要使用NextContainerKey和NextRowKey进行分页。

  注意这里需要使用127.0.0.1:10002/devstoreaccount1替换AccountName.table.core.windows.net,因为我们还在DS上开发。

  图6显示了OakLeaf系统Azure Table服务示例项目在DF中显示的Web页面,显示了12个CustomerTable实体和用户为新的BOGUS实体输入的数据。

Azure开发平台

  图6.运行在DF中OakLeaf系统Azure Table服务示例项目的Default.aspx页面

  Azure Blob服务

  Blob存储二进制数据,如图像,XML文档,压缩文件和其它在容器内任意排列的字节,容器是用户定义的一套只有一个属性的Blob集,它包含一串Blob,容器不直接存储数据。

  下面的GET URI从名叫ContainerName的容器中返回所有的Blob:http://AccountName.blob.core.windows.net/ContainerName$comp=list。使用http://AccountName.blob.core.windows.net/ContainerName/BlobName读取或下载特定的Blob,包括元数据和用户定义的属性。

  注意我们在DS中应使用127.0.0.1:10000/devstoreaccount1替换AccountName.blob.core.windows.net。

  在PUT Blob操作中你可以上传最大64MB的数据创建一个Blob,通过上传连续块可以创建大于64MB的Blob,块最大只能是4MB。

  图7显示了OakLeaf系统Azure Blob服务Test Harness应用程序从Windows Live SkyDrive上传三个位图文件和四个位图压缩文件,从一个Web页面上传一个HTML文件后的默认页面,HTTP头,元数据和用户定义的属性值作为GridView控件的数据源。

Azure开发平台

  图7.运行在DF中OakLeaf系统Azure Blob服务Test Harness应用程序的Default.aspx页面

  其中“Upload Time”列是将Blob数据转换成文件流所用的时间(单位秒),“Create Time”是从文件流创建Blob所用的时间。

  Azure Queue服务

  Azure Queue中的消息尺寸最大为8KB,它有一个REST API,与Blob类似,下面的GET URI从账号名为AccountName的存储账号中返回所有的Queue:http://AccountName.queue.core.windows.net$comp=list。使用http://AccountName.queue.core.windows.net/QueueName检索一条或多条消息。另外可以指定numofmessages参数检索2到最大32条消息。

  在DS中我们应该使用127.0.0.1:10001/devstoreaccount1替换AccountName.queue.core.windows.net。

  Put Message操作向Azure Queue中增加消息,通过http://AccountName.queue.core.windows.net/QueueName/messages URI调用POST方法,请求主体包括一个或多个类似下面这样的XML片段:

  message-content

  这里的message-content是一个可能是UTF-8编码的字符串,二进制内容必须是Base64编码的。

  图8显示了Photo Gallery Azure Queue服务Test Harness应用程序的默认页面,“Queue Name”是数字型的日期/时间,自动按照创建时间顺序进行降序排列,“Type”是message-content的MIME类型,“ETag”是用于支持乐观一致性的日期/时间代码。

Azure开发平台

  图8.运行在DF中Photo Gallery Azure Queue服务Test Harness应用程序的Default.aspx页面

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国