技术开发 频道

使用Full IIS模式部署多站点和虚拟目录

  【IT168技术】首先在Solution 中添加一个新的Web Application。注意,这里是直接添加了一个WebApplication,而不是添加一个新的Web Role。打开Default.aspx 文件修改一下标题,以便于部署后能够方便地看出所浏览的页面属于哪个项目。完成后的Default.aspx 文件如下所示。

<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<h2>
This
is WebApplication1.
</h2>
... ...
</asp:Content>

  同样的,修改一个原来Web Role 中Default.aspx 的内容,显示此页面属于WebRole1。

  打开ServiceDefinition.csdef 文件,将新添加的Web Application 加入到IIS 的一个新的Web站点里面。在CSDEF 文件的Endpoints 节点中加入一个新的HTTP Input Endpoint,它指向8080端口。接下来将Site 节点的内容复制一份作为Web Application 项目的配置信息。在新的Site 节点中将name 属性设置为Web2,同时通过physicalDirectory 属性设置Web Application 项目所在的相对路径(相对路径的根地址即CSDEF 文件所在的地址)。最后指定这个网站绑定的Endpoint,修改Binding 节点的endpointName 属性,使其指向刚才创建的8080 端口的Endpoint。完成后的配置文件如下所示。

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="FullIisDemo" xmlns="http://schemas.microsoft.com/
ServiceHosting/2008/10/ServiceDefinition">
<WebRole name="WebRole1">
<Sites>
<Site name="Web">
<Bindings>
<Binding name="Binding1" endpointName="Endpoint1" />
</Bindings>
</Site>
<Site name="Web2" physicalDirectory="..\WebApplication1">
<Bindings>
<Binding name="Binding2" endpointName="Endpoint2" />
</Bindings>
</Site>
</Sites>
<Endpoints>
<InputEndpoint name="Endpoint1" protocol="http" port="80" />
<InputEndpoint name="Endpoint2" protocol="http" port="8080" />
</Endpoints>
<Imports>
... ...
</Imports>
</WebRole>
</ServiceDefinition>

  然后,在发布Windows Azure 项目之前需要手动编译一下新加入的Web Application 项目。这是因为在Visual Studio 的项目依赖关系中并没有把这个Web Application 项目加入到WindowsAzure Roles 中,因此直接发布Windows Azure 项目的话这个Web Application 不会被自动编译。最后发布Windows Azure 项目。

  完成之后可以先来看一下效果。首先通过Hosted Service URL 进行访问,可以看到默认的Web Role 站点被显示,如图8-47 所示。

使用Full IIS模式部署多站点和虚拟目录
▲图8-47 显示默认的Web Role

  然后我们通过8080 端口进行访问,这时候显示的就是后来添加的Web Application 页面,如图8-48 所示。

  通过远程桌面登录到虚拟机,可以看到这种情况下IIS 中部署了两个Web 站点,分别对应了CSDEF 文件中定义的两个Site 节点的内容,如图8-49 所示。

使用Full IIS模式部署多站点和虚拟目录
▲图8-48 通过8080 端口浏览另一个Website

使用Full IIS模式部署多站点和虚拟目录
▲图8-49 Full IIS 模式下IIS 部署了两个站点

  除此之外,用户还可以实现虚拟应用程序和虚拟目录的功能。打开CSDEF 文件,在第一个Site 节点下加入VirtualApplication 节点,其name 属性设置为WebApp1,physicalDirectory 属性设置为Web Application 项目的相对路径。这样,便可以通过这个Web 站点的WebApp1 路径访问Web Application 的页面,例如http://aurora-sys.clouapp.net/WebApp1。

  然后在VirtualApplication 节点下面加入虚拟目录,比如可以将Scripts 和Styles 路径分别指向Web Role 下面的Scripts 和Styles 路径。完成后的配置文件如下所示。为了便于展示,可以将Web Role 的CSS 文件稍作调整。

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="FullIisDemo" xmlns="http://schemas.microsoft.com/
ServiceHosting/2008/10/ServiceDefinition">
<WebRole name="WebRole1">
<Sites>
<Site name="Web">
<VirtualApplication name="WebApp1" physicalDirectory="..\WebApplication1">
<VirtualDirectory name="Scripts" physicalDirectory="..\WebRole1\ Scripts"/>
<VirtualDirectory name="Styles" physicalDirectory="..\WebRole1\Styles"/>
</VirtualApplication>
<Bindings>
<Binding name="Binding1" endpointName="Endpoint1" />
</Bindings>
</Site>
<Site name="Web2" physicalDirectory="..\WebApplication1">
<Bindings>
<Binding name="Binding2" endpointName="Endpoint2" />
</Bindings>
</Site>
</Sites>
<Endpoints>
<InputEndpoint name="Endpoint1" protocol="http" port="80" />
<InputEndpoint name="Endpoint2" protocol="http" port="8080" />
</Endpoints>
<Imports>
... ...
</Imports>
</WebRole>
</ServiceDefinition>

  最后重新编译整个Solution 并上传到Windows Azure 平台看一下效果。分别在浏览器中打开Hosted Service URL 以及8080 端口的URL,可以看到和刚才的效果一样。然后加入WebApp1路径来打开设置的Virtual Application。如图8-50 所示,这时候在页面中显示的是运行于WebApplication 的内容,但是标题栏的颜色是Web Role 中CSS 文件中的配置。在CSDEF 中配置的Virtual Application 和Virtual Directory 都起了作用。

使用Full IIS模式部署多站点和虚拟目录
▲图8-50 浏览Virtual Application 的内容

  最后远程桌面到Windows Azure 虚拟机中,打开IIS 控制界面,可以看到所设置的VirtualApplication 和Virtual Directory,如图8-51 所示。

使用Full IIS模式部署多站点和虚拟目录
▲图8-51 虚拟机IIS 中的Virtual Application 和Virtual Directory 设置

0
相关文章