技术开发 频道

基于Hosted Web Core 方式部署Web Role

  【IT168技术】在介绍Windows Azure 平台部署Web Role 的原理之前,首先来看一个Windows Azure 项目,它只有一个ASP.NET Web Role。

  打开ServiceDefinition.csdef 文件,如下所示。

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="FullIisDemo" xmlns="http://schemas.microsoft.com
/ServiceHosting/2008/10/ServiceDefinition">
<WebRole name="WebRole1">
<Endpoints>
<InputEndpoint name="Endpoint1" protocol="http" port="80" />
</Endpoints>
<Imports>
<Import moduleName="Diagnostics" />
<Import moduleName="RemoteAccess" />
<Import moduleName="RemoteForwarder" />
</Imports>
</WebRole>
</ServiceDefinition>

  和我们之前看到的定义文件不同,这个文件里面没有Site 节点,而是直接定义了一个指向80 端口的HTTP Input Endpoint 作为对外的终结点地址。将这个项目部署到Windows Azure 平台并加入远程桌面支持。

  部署完毕后,通过远程桌面连接到这个Role Instance 虚拟机上面。进入IIS 管理界面,如图8-41 所示,在IIS 中只有默认站点而没有这个Web Role 所对应的站点。而且这个默认站点指向的本地文件路径并不是Web Role 的所在位置。那么Web Role 被部署到哪里了?

  图8-41 基于Hosted Web Core 部署的情况下的IIS 状态

  打开虚拟机的任务管理器,可以看到有一个名为WaWebHost.exe 的进程,如图8-42 所示。这个Web Role 就被部署在了这个进程之中,而非IIS。那么这个WaWebHost.exe 又是什么呢?

  图8-42 虚拟机中的WaWebHost 进程

  这个例子中的Windows Azure 项目,它的ServiceDefinition.csdef 文件格式是基于SDK 1.2版本编写的,在配置文件中不包含Site 节点,所以当我们部署这个Windows Azure 项目的时候,Windows Azure 平台将会使用旧的模式部署Web Role。在这种模式下,Web Role 不会被部署到虚拟机的IIS 中,而是会被部署到一个名为Hosted Web Core 的组件里面,即如图8-42 所示的WaWebHost.exe 进程。

  Hosted Web Core 正如其名称一样,是一个可以寄宿Web 站点的组件。通过它,Web 站点可以被部署在IIS 之外的一个进程中。Hosted Web Core 可以完成绝大多数IIS 的功能,所以一般来说,部署在Hosted Web Core 的网站和部署在IIS 中的没有任何区别。但也正是由于Hosted WebCore 只是IIS 的一个功能子集,因此无法完全实现IIS,包括多站点部署、虚拟目录、虚拟应用程序以及WAS(Windows Activation Service)。这就是为什么开发人员在Windows Azure SDK 1.3之前无法在一个Hosted Service 中实现多个Web Role 部署。

  但是Hosted Web Core 部署的方式也会为程序带来一些便利。首先是对于Windows Azure 平台本身,Hosted Web Core 由于更加简单独立所以更便于Controller Fabric 控制。另外,对于WebRole 来说,WebRole.cs 中的代码和网站代码都是运行在同一个应用程序域的下面。也就是说对于RoleEntry 的OnStart、Run 和OnEnd 等代码都是和网站代码运行在一起的。这样一来,网站代码中和WebRole.cs 的代码相互调用等操作就会非常方便。图8-43 展示了使用Hosted Web Core模式部署Web Role 的状态。

  图8-43 基于Hosted Web Core 部署Web Role 的状态

0
相关文章