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大模型。
目录
相关文章
|
11月前
|
开发框架 监控 安全
Windows Defender 导致 Web IIS 服务异常停止排查
某日凌晨IIS服务异常停止,经查为Windows Defender安全补丁KB2267602触发引擎更新,导致系统资源波动,进而引发应用池回收。确认非人为操作,系统无重启。通过分析日志与监控,定位原因为Defender更新后扫描加重负载。解决方案:将IIS及.NET相关路径添加至Defender排除列表,避免业务影响。
1091 116
|
11月前
|
Java 测试技术 网络安全
Burp Suite Professional 2025.10 for Windows x64 - 领先的 Web 渗透测试软件
Burp Suite Professional 2025.10 for Windows x64 - 领先的 Web 渗透测试软件
479 0
Burp Suite Professional 2025.10 for Windows x64 - 领先的 Web 渗透测试软件
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
723 4
|
SQL 安全 PHP
PHP 自发布以来一直在 Web 开发领域占据重要地位,PHP 8 更是带来了属性、刚性类型等新特性。
【10月更文挑战第1天】PHP 自问世以来,凭借其易用性和灵活性,在 Web 开发领域迅速崛起。从简单的网页脚本语言逐步演进为支持面向对象编程的现代语言,尤其自 PHP 5.3 引入命名空间后,代码组织和维护变得更加高效。PHP 7 的性能优化和 PHP 8 的新特性(如属性和刚性类型)进一步巩固了其地位。框架如 Laravel、Symfony、Yii2 和 CodeIgniter 等简化了开发流程,提高了效率和安全性。
307 2
|
网络安全 Windows
Windows IIS 10如何配置自签名SSL并实现自动跳转
本文记录了IIS配置自签名证书及HTTPS跳转的注意事项。包括解决443端口占用问题、URL Rewrite插件安装与配置、web.config修改方法,以及避免因旧教程导致的配置错误。
Windows IIS 10如何配置自签名SSL并实现自动跳转
|
安全 Linux iOS开发
Burp Suite Professional 2025.7 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
Burp Suite Professional 2025.7 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
909 0
Burp Suite Professional 2025.7 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
|
人工智能 安全 网络安全
Burp Suite Professional 2025.5 for Windows x64 - 领先的 Web 渗透测试软件
Burp Suite Professional 2025.5 for Windows x64 - 领先的 Web 渗透测试软件
699 4
Burp Suite Professional 2025.5 for Windows x64 - 领先的 Web 渗透测试软件
|
安全 Devops 测试技术
AppSpider 7.5.018 for Windows - Web 应用程序安全测试
AppSpider 7.5.018 for Windows - Web 应用程序安全测试
299 0
AppSpider 7.5.018 for Windows - Web 应用程序安全测试
|
人工智能 Linux iOS开发
Burp Suite Professional 2025.2 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
Burp Suite Professional 2025.2 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
1163 12
Burp Suite Professional 2025.2 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
|
安全 JavaScript Java
AppSpider Pro 7.5.015 for Windows - Web 应用程序安全测试
AppSpider Pro 7.5.015 for Windows - Web 应用程序安全测试
313 12
AppSpider Pro 7.5.015 for Windows - Web 应用程序安全测试