Windows Azure Cloud Service (22) Web Role的Full IIS特性

简介:

Windows Azure Platform 系列文章目录

 

  在Windows Azure SDK 1.3,用户无法在一个Windows Azure项目中加入多个Web站点(Web Role),也就是说一个Web Role Instance只能部署一个网站,这对于具有在单一网站上使用多个应用程序的Web Application来说是个不小的问题。

  Web Role无法假设多网站的根本原因,是初期的Web Role中真正挂载Web应用程序的执行元件是Hosted Web Core (HWC)引擎,它是一个可以寄宿Web站点的组件,它借用IIS的一部分来处理,执行Web Role的引擎是WaWebHost.exe。但也正是由于Hosted Web Core只是IIS的一个功能子集,因此无法完全实现IIS,包括站点部署、虚拟目录、虚拟应用程序以及WAS(Windows Activation Service)。

但是随着Windows Azure SDK 1.3及其相关功能的更新,现在开发人员已经可以使用名为Full IIS的功能在同一个Role Instance中部署多个Web Role,在这里我介绍一下如何使用Full IIS。

  基于Full IIS部署的Web Role

  我们先新建一个Windows Azure项目,并且添加一个ASP.NET Web Role。打开ServiceDefinition.csdef文件。

  将这个项目发布到Windows Azure平台,然后远程桌面连接进入Azure VM的IIS里。可以看到一个叫EmployeeWeb_IN_0_Web的站点

  在Windows Azure SDK 1.3更新中,Windows Azure平台对于Web Role的部署方式进行了改革。虽然用户还可以通过手动修改CSDEF文件的方式强制使用Hosted Web Core模式,但是在默认情况下,Windows Azure平台将会使用操作系统的IIS来部署Web Role。下图展示了在Full IIS模式下,网站、RoleEntry类、IIS等的关系。

  在Full IIS模式下,Web Role分别在两个进程中运行。首先,RoleEntry中的代码,例如OnStart、Run和OnEnd的代码都会在WaIISHost进程中执行。然后,网站会被部署到IIS中并由w3wp.exe 执行。所以说,在Full IIS模式下,RoleEntry和网站是在不同的应用程序域中运行的。

  由于使用Full IIS模式下网站完全运行于IIS,所以可以使用IIS的全部功能,包括多站点、虚拟目录、虚拟应用程序以及AWS等。但是由于RoleEntry和网站运行于不同的应用程序域,所以在使用Full IIS模式的时候需要特别注意。

 

  使用Full IIS时的注意事项

  Full IIS模式提供完整的IIS功能,但是由于RoleEntry和网站代码运行在不同的应用程序域中,因此在开发的时候需要特别留意如下一些问题。

  首先是配置文件的读取操作。我们知道,要想通过SDK使用Windows Azure存储服务,首先需要设定Storage Account的获取方法,也就是运行下面的代码。

 CloudStorageAccount.SetConfigurationSettingPublisher((configName, configSetter) =>
{
configSetter.Invoke(RoleEnvironment.GetConfigurationSettingValue(configName));
});

  如果将此段代码放在WebRole的OnStart方法中,在网站代码中使用存储服务就会引发异常,异常信息显示必须要事先调用CloudStorageAccount的SetConfigurationSettingPublisher方法。

  为什么在WebRole的OnStart方法中调用无效呢?这是由于在Full IIS模式下,写在Web Role中的代码运行在WaIISHost这个进程之下,而网站代码运行在IIS的w3wp进行,所以上述代码虽然执行了,但是对于网站而言是无效的。因此,如果项目使用的是SDK 1.3及其以后的版本,那么SetConfigurationSettingPublisher要写在ASP.NET的Application_Start方法中,而不能只写在WebRole的OnStart方法中。

(笔者:这个问题在使用Windows Azure SDK 1.3的时候确实会发生这样的问题,而且在本地debug的时候本地模拟器无法执行Global.asax的Application_Start()函数,具体请参考这篇Blog,只能部署到Windows Azure上才能执行Application_Start()。但是笔者升级到Azure SDK 1.6之后,SetConfigurationSettingPublisher写在WebRole的OnStart的方法里也可以成功执行。所以在新的SDK 1.6里不必拘泥于执行代码到底是写在WebRole.cs还是Global.asax里。)

  另外一个问题就是公有变量(属性)读写操作的失败。在Windows Azure Platform (十六)Windows Azure Drive 里,当应用程序加载了BLOB Service中的VHD之后,程序将分配的Cloud Drive盘符寸猝倒了Table Service中,之后再网站代码中又通过Table Service来读取盘符进行操作,而不是直接通过WebRole的某个公有变量传递盘符。这是因为Cloud Drive的代码在WebRole的OnStart()中执行,获取的盘符无法通过WebRole中的变量传递给位于另一个进程中的网站代码,所以必须要通过Table Service进行传递。当然也可以在网站的Application_Start方法中加载Cloud Drive来避免这个问题。

  虽然Full IIS功能改变了整个Web Role的启动和加载模式,和Windows Azure SDK 1.3以前的方式有很大不同,但是由于它能够支持所有IIS特性,所以对于Windows Azure上的Web开发来说还是非常有意义的。

 

本文参考:

徐子岩著的《实战Windows Azure 微软云计算平台技术详解》 电子工业出版社

 

  

 


本文转自Lei Zhang的博客博客园博客,原文链接:http://www.cnblogs.com/threestone/archive/2012/03/10/2388914.html,如需转载请自行联系原作者
相关实践学习
在云上部署ChatGLM2-6B大模型(GPU版)
ChatGLM2-6B是由智谱AI及清华KEG实验室于2023年6月发布的中英双语对话开源大模型。通过本实验,可以学习如何配置AIGC开发环境,如何部署ChatGLM2-6B大模型。
目录
相关文章
|
2月前
|
网络安全 Windows
Windows IIS 10如何配置自签名SSL并实现自动跳转
本文记录了IIS配置自签名证书及HTTPS跳转的注意事项。包括解决443端口占用问题、URL Rewrite插件安装与配置、web.config修改方法,以及避免因旧教程导致的配置错误。
Windows IIS 10如何配置自签名SSL并实现自动跳转
|
4月前
|
人工智能 安全 网络安全
Burp Suite Professional 2025.5 for Windows x64 - 领先的 Web 渗透测试软件
Burp Suite Professional 2025.5 for Windows x64 - 领先的 Web 渗透测试软件
224 4
Burp Suite Professional 2025.5 for Windows x64 - 领先的 Web 渗透测试软件
|
4月前
|
安全 Devops 测试技术
AppSpider 7.5.018 for Windows - Web 应用程序安全测试
AppSpider 7.5.018 for Windows - Web 应用程序安全测试
86 0
AppSpider 7.5.018 for Windows - Web 应用程序安全测试
|
7月前
|
人工智能 Linux iOS开发
Burp Suite Professional 2025.2 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
Burp Suite Professional 2025.2 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
346 12
Burp Suite Professional 2025.2 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
|
7月前
|
安全 JavaScript Java
AppSpider Pro 7.5.015 for Windows - Web 应用程序安全测试
AppSpider Pro 7.5.015 for Windows - Web 应用程序安全测试
93 12
AppSpider Pro 7.5.015 for Windows - Web 应用程序安全测试
|
6月前
|
自然语言处理 安全 测试技术
HCL AppScan Standard 10.8.0 (Windows) - Web 应用程序安全测试
HCL AppScan Standard 10.8.0 (Windows) - Web 应用程序安全测试
334 0
HCL AppScan Standard 10.8.0 (Windows) - Web 应用程序安全测试
|
Windows 网络协议 数据安全/隐私保护
|
网络协议 Windows 数据安全/隐私保护

热门文章

最新文章