图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的执行结果
看到web role的运行结果后,我们把注意力重点转向Development Fabric,在这里我们将看到Worker Role的运行结果。要查看Development Fabric的结果,任务栏通知区域看到Development Fabric,Development Fabric是一个仿真环境,在本机模拟运行角色实例。在左侧的工具按钮中选择如图4所示的按钮。
图4 选择Development Fabric
选择显示Development Fabric,打开界面如图5所示:
图5 Fabric 的web Role
在图5中,我们可以看到web role的entrypoint是OnStart方法,同时也调用了Run方法。Worker Role的运行结果如图6所示:
图6 Fabric 的 Worker Role
在Worker Role中,可以看到进程被调用,执行了HelloWord.cmd,同时显示刷新的系统时间。
接下来我们介绍开发过程和核心代码。
步骤一:创建项目
打开VS 2010 创建云计算项目FullTrust,在弹出如图1所示的界面中,分别选择Web Role和Worker Role,并进行重命名为FullTrust_WebRole和FullTrust_WorkerRole。在重命名的时候,有个小技巧,把角色类型选到云服务解决方案中后,直接右击就可以重命名,当然也可以在项目中进行重命名,所不同的时候,项目名称改了,但是在本地磁盘存储文件的文件夹名称并没有改变。
创建完工程后,在FullTrust_WebRole项目中添加Default和ExecuteProcess页面,HelloWorld.cmd脚本;在复制HelloWorld.cmd脚本文件到FullTrust_WorkerRole。
这样我们创建项目的工作告一段落。
步骤二:编写Web Role功能
在FullTrust_WebRole中,default页面点击按钮显示刷新时间,核心代码如下:
按钮事件代码:
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> protected void Button1_Click( object sender, EventArgs e)
{
UpdateProcessInfo();
}
转载于:http://blog.itpub.net/9914816/viewspace-666278/