代码改变世界

Windows Azure Platform体验(1):Windows Azure

2010-11-15 08:42 by 李永京, ... 阅读, ... 评论, 收藏, 编辑

Windows Azure Platform有Windows Azure、SQL Azure、Azure AppFabric三部分。

Windows Azure提供一个具有计算、存储、托管和管理功能的可扩展环境。它通过安全的连接、消息传送和标识管理链接到内部部署的应用程序。

这节我们体验Windows Azure,必备软件:

这次体验有下面几个步骤,分别是:

创建云服务项目

首先理解下Web托管角色功能,利用这个功能,我们创建一个新网站,然后将它托管在Windows Azure内。

以管理员身份启动Visual Studio 2010,创建一个新的Azure云服务项目。选择“云”模板类型的“Windows Azure 云服务”项目模板。将这个新项目命名为“HelloAzure”,单击“确定”之后,立即弹出一个新的向导。

HelloWindowsAzure

在这个向导中,可以为这个云应用程序创建一些不同类型的角色,这样我可以在实际应用程序中安装和配置这些角色。可以看到,这里有一些不同的ASP.NET Web角色,最上面的是ASP.NET标准Web角色。如果要开发MVC类型的应用程序,可以使用MVC 2 Web角色。另外,这里还有一个WCF服务Web角色。所有这些角色(包括最下面的CGI Web角色)都将在标准的Windows Azure Web角色内运行。通过单击右侧(即屏幕中央)的箭头,可以完成上述任务,进而在同一个解决方案中添加多个这类项目。

这节我介绍Web角色,所以我选择“ASP.NET Web 角色”项并单击右箭头移到右侧,如果需要,还可以选择将其他角色(如工作者角色)添加到本项目中。请注意,实际上,您还可以创建多个同样的应用程序。例如,如果要在Windows Azure解决方案内托管两个不同的ASP.NET网站,我可以选择ASP.NET Web角色之后再次添加这个角色。 现在,我只选择一个,将Web角色添加到解决方案中。

单击项目右侧的编辑按钮,将“WebRole1”重命名为“HelloAzure_WebRole”。将鼠标悬停在项目上将会显示编辑按钮。单击“确定”。

HelloWindowsAzure

在向导运行完毕,创建所有文件之后,应具有一个包含以下两个项目的解决方案:

  • 云服务项目
  • 作为 ASP.NET Web 应用程序的 Web 角色

解决方案资源管理器看起来如下图所示:

HelloWindowsAzure

我们简单修改下Web网页,和平常的一样,打开Default.aspx并切换到设计视图。打开工具箱,并双击“按钮”工具向页面中添加一个按钮。双击页面上的新按钮添加事件处理程序。这就不截图了。

修改Azure应用程序的某些配置

可以看到,云服务项目有一些配置文件,一个是ServiceConfiguration文件,另一个是ServiceDefinition文件。 例如,如果要在两个独立的实例中运行这个Web角色,以便扩展Web应用程序。

在“解决方案资源管理器”中的“角色”节点下选择一个角色,然后右击并选择“属性”。这将显示该Web角色的属性页。使用属性页可以编辑服务定义文件和服务配置文件中的每个角色级别的元素和特性。将实例计数从 1 更改为2。

HelloWindowsAzure

我在用户界面中进行更改,然后保存这些更改。可以看到,这样就更改了下面的配置文件。

HelloWindowsAzure

调试云服务项目

选择“调试”->“开始调试”(F5)。

如果出现一个错误对话框,显示“Windows Azure Tools: Failed to initialize Development Storage service. Unable to start Development Storage. Failed to start Development Storage: the SQL Server instance ‘localhost\SQLExpress’ could not be found.Please configure the SQL Server instance for Development Storage using the ‘DSInit’ utility in the Windows Azure SDK.”错误,则需要手动配置开发存储的数据库实例。

HelloWindowsAzure

打开开始菜单Windows Azure SDK v1.2目录的Windows Azure SDK Command Prompt。键入“DSInit /sqlinstance:.”即配置开发存储的数据库实例。

HelloWindowsAzure

如果是第一次使用开发存储,则将显示开发存储初始化对话框:

HelloWindowsAzure

初始化完成之后,单击“确定”关闭对话框。

浏览器将自动启动并指向您的网站。完整地址将类似于 http://127.0.0.1:81/default.aspx。

当单击按钮时,这时会命中在调试器中设置的断点。我可以像以前一样调试。将鼠标悬停在标签的实际文本属性上,可以看到,属性值的设置正确无误。 我可以像以前一样执行所有的标准调试任务,例如,我可以按F10和F11来单步执行和逐过程执行代码,开发体验和以往并无不同。

HelloWindowsAzure

HelloWindowsAzure

请注意,所有的这些都托管在本地工作站的虚拟Windows Azure云基础结构中,并且采用了称为“开发结构用户界面”和“开发存储用户界面”的形式,系统任务栏中提供一个Windows Azure图标,您可以通过此图标显示Development Fabric用户界面和开发存储用户界面或者关闭这些服务。我们可以打开这些用户界面,看看你这些服务时如何运行的。

当然,存储基础结构模拟的是Windows Azure存储服务,开发结构功能则代表最终在云中部署后要运行的Web角色功能和工作者角色功能。

HelloWindowsAzure

现在加载开发结构用户界面,单击“Show Development Fabric UI”,Development Fabric实用工具将出现。您可以使用此实用工具来管理本地开发并查看这些开发的日志数据。

HelloWindowsAzure

可以看到,左侧是工作站中运行所有的Windows Azure开发基础结构或项目的预览。 在这里只有一个项目,它的ID是4,右侧是这个Web应用程序以及在这个服务中运行的所有其他Web应用程序的详细信息。可以看到,这里只有一项。另外请注意,从这里可以看出,部署到云中后,最终配置将从默认端口80运行。 不过,为了进行本地部署,已对它进行映射,在这里是映射至端口81,和之前浏览器窗口中显示的一样。

然后,我们看部署的每个Web角色和工作者角色的详细信息。我们可以看到有两个独立的WebRole控制台:一个是“0”,一个是“1”。这是因为他们被当做两个独立的实例在本地工作站中运行。 两个实例的旁边都有一个绿色小圆圈,说明他们的运行和加载都是成功的。 每个控制台内显示的具体详细信息,这些信息十分详尽,所有组成部分都紧密相连,保证了实际角色在计算机中的正确运行。如果出现需要解决的问题,可以利用这些信息来排除故障。如果需要输出跟踪信息,也可以在这里显示这些信息。

HelloWindowsAzure

如果您正在使用开发存储服务,则可以右击 Windows Azure 任务栏图标并选择“Show Development Storage UI”以显示下面的对话框,该对话框将使您能够控制正在运行的存储服务并重置所有数据。

HelloWindowsAzure

好,一切运行正常,我们有了一个本地运行的Windows Azure云应用程序。接下来,可以继续进行开发或调试等等工作,本地开发体验相当完善。不过,在应用程序运行之后,现在需要将它实际部署到Windows Azure云中, 这样,就可以与能够访问实际云的用户共享我的应用程序。

发布云服务项目

右击“云服务”项目节点并选择“发布”,将这个应用程序发布到云中。

HelloWindowsAzure

从“发布云服务”对话框中,这里有两个选项:可以将服务包直接部署到 Windows Azure中。也可以选择生成服务包并通过开发人员门户网站自己上载它。在这里,我选择仅创建服务包,单击“确定”按钮。

HelloWindowsAzure

这样,应用程序的应用程序文件便打成了包,然后会启动一个新的Windows资源管理器窗口,显示创建的文件。

可以看到,最上面的是一个“CS Package”类型的文件“HelloCloud”这就是实际的云服务应用程序,这个文件有点大。第二个文件是整个应用程序的配置文件。Windows Azure根据这个文件进行实际配置,如每个角色需要运行的实例数、角色需要的配置方式等等。

HelloWindowsAzure

上传云服务项目

这时使用账号登录Windows Azure开发人员门户网站,网址为http://windows.azure.com/,创建一个新项目,然后部署这些文件。

点击我的项目中的项目名称:

HelloWindowsAzure

出现Window Azure概况页,可以看到当前没有任何服务,我们点击“New Service”创建一个新的Windows Azure服务。

HelloWindowsAzure

在创建服务页面中,我可以选择创建“Storage Account”(存储账户)还是“Hosted Services”(托管服务)。我们选择托管服务,这是因为我们有一个需要托管的ASP.NET网站。

HelloWindowsAzure

接下来,为新服务填写有意义的标签和描述,以便以后区分。点击“Next”(下一步)完成服务的创建。

HelloWindowsAzure

然后进行最后的一些设置工作。首先,需要为它提供一个公共托管的URL,用来访问这个Web应用程序。不过,因为这是一个共享服务,其他人可能选用过类似的名称。 因此,需要执行“check availablity”(检查可用性)执行可用性检查,确保名称可用。接下来,需要选择将Windows Azure应用程序托管在哪个数据中心或地区,可以在整个清单中选择,比如说,我选择“东亚”。如果有多个应用程序,例如需要相互交流数据信息的Windows Azure应用程序与SQL Azure数据库,就可以使用本页面底部的相关性组,确保这些应用程序位于同一个数据中心内。完成这一段设置之后,最后一个步骤是单击“Create”(创建)按钮,创建可以部署应用程序的最终基础结构。

HelloWindowsAzure

创建需要几分钟的时间,可以看到,这个服务的名称以及刚才输入的描述都显示出来了,在下面的“Hosted Service”(托管服务)中,可以选择是将应用程序部署在“Production”(生产)还是“Staging”(分段)环境中。这个两个选项都可以选择,我也可以在两者之间方便的切换,因此可以在生产环境和分段环境之间轻松转移应用程序和部署。不过,现在我不选择分段环境,而是直接选择生产环境,以便直接查看实际托管的应用程序。

我们直接开始部署,单击“Deploy...”(部署)按钮。

HelloWindowsAzure

这时会出现一个新窗体,在这个窗体中,上传实际的应用程序文件和整个应用程序的配置文件。操作系统选择默认设置,填写部署标签。单击“Deloy”(部署)按钮。

HelloWindowsAzure

系统上传应用程序文件和配置文件,将这些文件放到Windows Azure中确定以最佳方式部署应用程序,这一过程需要持续5到10分钟。

完成这一步骤后,可以将应用程序实际投入运行,因为现在它处于一个类似于“暂停状态”的最后阶段。如果停止运行,也会出现这个状态,这个状态执行其它设置步骤或升级一个已经投入运行的应用程序。不过,现在我们单击“Run”(运行)。

HelloWindowsAzure

可以看到,应用程序已经部署到虚拟环境中,正在启动这些虚拟环境。这时有一个很小的黄色状态指示器,说明Web角色正在初始化状态。

HelloWindowsAzure

屏幕进行自动刷新,可以看到从“Initializing”(正在初始化)状态变成了“Busy”(忙)。最后变成了绿色状态,只有当状态图标变为绿色,状态变成“Ready”(就绪)的时候,说明已经完成部署,并且在Windows Azure中投入运行。

HelloWindowsAzure

我们可以通过URL访问这个云服务了。

HelloWindowsAzure

好了,我从头到尾体验了一下Windows Azure云应用程序。使用VS工具进行开发,和以前使用的本地化开发结构环境一样,我们可以执行本地调试等任务。最后一切准备就绪之后,通过简单的步骤,将应用程序部署到Microsoft Windows Azure云服务中。