在Azure开发平台上创建并运行一个项目
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安装程序默认将它们安装在开发计算机的\ProgramFiles\WindowsAzureSDK\v1.0\bin\devfabric文件夹下,启动DF后,在Windows任务管理器的进程管理列表中可以看到这四个进程,启动DF的方法有三种:
1、通过开始菜单Programs\WindowsAzureSDK\Development Fabric启动DF服务和UI(DFUI.exe)。
2、在任务栏通知区域DF图标上点击右键,选择“启动Development Fabric服务”,如图1所示。
图 1 通过任务栏DF图标查看DF运行状态,启动DF服务
3、在Visual Studio中编译并运行一个Azure应用程序。
图2显示了Visual Studio 2008中两个并行调试Web应用程序(叫做Service Deployments)的DFUI,DF自动给这两个应用程序做了连续的编号(616和617),当你停止调试后,DFUI窗口中对应的应用程序项目就会消失。
图 2 在DFUI窗口中查看Visual Studio 2008中调试的应用程序
Development Storage
Windows Azure Platform支持三种可扩展的持久化存储:
1、非结构化数据(Blob)
2、结构化数据(Table)
3、应用程序之间,服务之间,或应用程序与服务之间的消息(Queue)
运行rundevstore.exe或在Visual Studio中运行Azure用户代码将启动这三个服务,即使你的项目只需要其中一个服务,同时还会显示DS UI窗口,如图3所示。
图 3 DS UI窗口,可查看每个存储服务的运行状态
为了保证数据的安全,Azure云至少会在同一数据中心三个独立的容器中存储Blob,Table和Queue,Azure基于地理位置的功能允许你将数据复制到多个微软数据中心,增强灾难恢复能力,提高特定地区的性能。
Azure服务定义和服务配置文件
运行在Development Framework中的Azure应用程序可以访问存储在本地Development Storage中的数据,也可以将数据上传到Azure云存储。
Azure项目的ServiceDefinition.csdef文件定义了一套标准的输入端点,ServiceConfiguration.cscfg文件存储了对应的设置,清单1显示了默认的ServiceDefinition.csdef内容。
清单1. 默认ServiceDefinition.csdef文件的内容
xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
<!-- Must use port 80 for http and port 443 for https when running in the cloud -->
清单2显示了默认ServiceConfiguration.cscfg文件的内容。
清单2. 默认ServiceConfiguration.cscfg文件的内容
<?xml version="1.0"?>
xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration">
1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw=="/>
<!--
value="http://blob.core.windows.net" />
value="http://queue.core.windows.net" />
value="http://table.core.windows.net" />
-->
下面是ServiceConfiguration.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所示。
图 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,应用程序用它们进行数据分页。
图 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实体输入的数据。
图 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控件的数据源。
图 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”是用于支持乐观一致性的日期/时间代码。
图 8 运行在DF中Photo Gallery Azure Queue服务Test Harness应用程序的Default.aspx页面
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9915116/viewspace-664226/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/9915116/viewspace-664226/