[Windows Azure] 在单一 Web Role 中部署多个 Web 应用程序

前面我们已经介绍了 Windows Azure v1.3 更新中的新功能之一:Full IIS,它可以允许开发人员在同一个 Web Role 中建置多个不同的网站应用程序,但目前 Windows Azure Tools for VS 2010 的项目模式,并不能在项目中直接设定在单一 Web Role 中部署多重网站或虚拟目录,因此我们要用手动的方式来做一些改变。


前面我们已经介绍了 Windows Azure v1.3 更新中的新功能之一:Full IIS,它可以允许开发人员在同一个 Web Role 中建置多个不同的网站应用程序,但目前 Windows Azure Tools for VS 2010 的项目模式,并不能在项目中直接设定在单一 Web Role 中部署多重网站或虚拟目录,因此我们要用手动的方式来做一些改变。

1. 首先,我们可以先用 Visual Studio 建立一个 Windows Azure 项目,而且加入多个 Web Role。

image

2. 建置完成后,修改一下各 Web 应用程序的 Master Page,以识别不同的 Web 应用程序,然后将其中两个 Web Role 由云端项目中移除 (笔者所用的是 RootApp, VirtualDirApp1, VirtualDirApp2 三个项目,在这个步骤笔者将 VirtualDirApp1 和 VirtualDirApp2 移除),并且在留下来的项目中,建立两个目录 (笔者建立了 VirtualDirApp1 和 VirtualDirApp2 两个目录)。

image

3. 将另两个 Web 应用程序发行到 Web Role 的项目,事先建立的数据夹中 (笔者是将 VirtualDirApp1 发行到 VirtualDirApp1 数据夹,另一个则是发布到 VirtualDirApp2),然后在  Web Role 项目中,将这些发行好的文件加到项目中。

image

image

4. 接着就是这篇文章最重要的步骤,请打开云端项目的 ServiceDefinition.csdef 文件,并且加入虚拟目录的设定:



  
    
      
        
        
        
          
        
      
    
    
      
    
    
      
    
  

5. 按 F5 启动 Visual Studio Debugger,并开启 IIS Manager,你可以看到在 IIS Manager 中会自动增加了由 Development Fabric 挂上的 Web Role 网站,以及配合执行的应用程序集区,当然,你也可以直接在 IIS 上浏览这些 Web 应用程序。

image

6. 将调试器停止,然后我们再试着修改 ServiceDefinition.csdef,把原本在虚拟目录中的 Web 应用程序设定改成网站,此时除了网站本身以外,还要再加上聆听的终端点 (一个网站只能聆听一个 port,除非有设定主机标头 header)。



  
    
      
        
          
        
      
      
        
          
        
      
      
        
          
        
      
    
    
      
      
      
    
    
      
    
  

现在再次启动调试器,你可以发现现在 IIS 中多了三个 Web 网站:

image

当本机测试完成后,就可以部署到云端上,笔者建议操作系统选用 Windows Azure Guest OS 2.0,搭载的是 Windows Server 2008 R2 以及 IIS 7.5,运行起来会更稳定。

Reference:

Windows Azure SDK v1.3 – How to configure a Web Role for Multiple Web Sites
Windows Azure SDK v1.3 – How to configure the Virtual Directory Location
Windows Azure SDK v1.3 – How to configure the Site Entry in the Service Definition File