【IT168专稿】Windows Azure提供了一个叫做Role的概念,每个Role可以被认为是一段程序,与普通的应用程序不同的是这段程序可以同时在一台或者多台机器上运行。每个Role可以有多个实例(Instance),每个实例就对应一台虚拟机。对同一个Role而言,它所有的实例执行的程序都是相同的。现在有两种类型的Role:Worker Role(工作者角色)和Web Role(Web 角色)。如图1所示:

图1 Web Role和Worker Role
Web Role:是一个 Web 应用程序,一个Web角色就是运行在IIS上的一个Web应用程序,它可以通过HTTP或HTTPS与外界通信,一般来说,Web角色响应请求,执行一个动作,然后等待下一个请求的到来。它作为客户端展现层的应用程序,所有与客户端互动的功能都是由这个角色来处理,因此它可以支持 ASP.NET Web Form、ASP.NET MVC 以及基于FastCGI 核心执行的应用程序,像是 PHP、JSP 或其他 CGI 应用程序。但 Web Role 只支持 HTTP 与 HTTPS 通道,因此若要使用 Web Role 开发服务的话,只有 ASP.NET Web Service(ASMX Service)或是使用 HTTP 通道的 WCF Service 可以使用。由图1可以创建的Web Role应用类型也说明了这一点。
Worker Role:是一种后台执行(Running On Background)的应用程序,运行.Net框架代码的后台进程应用程序。Worker Role与 Web Role 不同的是,它通常不与使用者直接互动,而是在后台访问任何网络资源、数据源并进行操作。它不开放外部访问接口,但是在接到命令后会毫无怨言地依次执行(Queue service里的消息队列能引导它的工作),这有点类似架设在 Windows Azure 上的 Windows Service,而且它又可以支持 HTTP/HTTPS 或 TCP 的通讯模式,特别适用于不限 HTTP 通讯的服务应用程序,像是一般的 WCF 服务。
通常开发 Windows Azure 应用程序时,只需要Web Role 就已足够,出于应用程序本身的架构和扩展性考虑,采用一些架构和设计可以把应用程序程序的功能分层,并把应用程序的一些逻辑处理分配给 Worker Role 是必要的,因为 Worker Role 会在后台处理工作,Web Role 只需要应付前端的用户接口互动即可,将工作交给适当的成员来执行,可以有效的提升应用程序的执行效能,也可以降低开发时的藕合性。
本文使用了微软Windows Azure Code Samples 里的FullTrust 示例来给大家做个简单演示。它让你感受到云计算开发的乐趣。由于是使用的已有案例,感兴趣的读者可以从http://code.msdn.microsoft.com/windowsazuresamples
下载完整的实例代码。这个示例演示了两个功能:通过P/Invoke,从管理代码中调用活动代码;子进程循环往复的运行命令行脚本。这里我们先给出运行的结果,然后对开发过程和核心代码做一个分析。运行项目,自动打开一个Web页面,如图2所示:

图2 Web Role的 Default页面
在Web Role的Default页面,点击刷新按钮,可以刷新进程系统时间信息。而ExcuteProcess.aspx页面是一个ASP.Net的页面,作为一个子进程,当子进程结束后,输出信息,如图3所示:
图3 Web Role的执行结果