在Azure Web Role中自定义配置IIS服务器

在">Azure Web Role中,开发者经常会面临一些场景,需要对IIS服务器做一定的配置和优化,以实现Web Role中的一些功能,如关闭静态文件加密(site compression)、强制SSL访问等,此类场景的出现具有一个共同的特点:web本身(包括code和web.config)不能实现开发者的需求,开发者必须通过配置web服务器(IIS)来实现其期望的web特性。

在PaaS中,用户通过远程连接(RDP)在web role虚机上的修改只能暂时生效,web role虚机在经历云平台的系统更新(每月一到两次)后,虚机环境会被恢复到刚刚发布的状态,即用户通过远程连接而做的设定(如IIS设定)会全部丢失!

因此,在Azure Web Role中,开发者如果需要自定义配置IIS服务器,必须通过代码来实现,以下就是一个例子:

1.       示例web role中,开启了http和https端口,网站中有一个文件夹test,测试目标是test目录下的所有页面仅能通过https访问。如示例项目:

2.       添加代码到webrole.cs文件中实现IIS中的SSL设置。此处需要指定目标目录名。

public override bool OnStart()

{

// By default, the website name is "[ Current Role Instance id]_Web"

string sitename = RoleEnvironment.CurrentRoleInstance.Id + "_Web";

// The folder you want to expose it only via https

string foldername = "test";

string cmd = string.Format(" set config \"{0}/{1}/\" /section:access /sslFlags:Ssl /commit:APPHOST", sitename, foldername);

string appcmdpath = @"d:\Windows\System32\inetsrv\appcmd.exe";

try

{

Process.Start(new ProcessStartInfo(appcmdpath, cmd));

Trace.TraceInformation("Initialize IIS ssl succeed.");

System.IO.File.AppendAllText("log.txt", DateTime.Now.ToString() + " | Initialize IIS ssl succeed.");

}

catch (Exception ex)

{

Trace.TraceError(ex.Message);

System.IO.File.AppendAllText("log.txt", DateTime.Now.ToString() + " | " + ex.Message + " | " + cmd);

//throw;

}

return base.OnStart();

}

3.       在servicedefinition文件中,找到对应的web role,添加以下设置。

<?xml version="1.0" encoding="utf-8"?>

<ServiceDefinition name="WindowsAzure4" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2013-03.2.0">

<WebRole name="WebRole1" vmsize="Small">

<Runtime executionContext="elevated"/>

<Sites>

<Site name="Web">

<Bindings>

……

4.       部署到云端,生效。

https://***.cloudapp.net/test/test1.aspx   (work)

http://***.cloudapp.net/test/test1.aspx  (does not work)

https://***.cloudapp.net/  (work)

http://***.cloudapp.net/   (work)

在Azure Web Role中,其他的IIS设定也可以通过类似的方法实现。其主要思路是:通过代码调用IIS自带的appcmd工具,用命令行的方式去设置IIS服务器。

关于appcmd工具:http://technet.microsoft.com/zh-cn/library/cc772200(v=ws.10).aspx

appcmd工具示例1--设定SSL访问:http://technet.microsoft.com/en-us/library/cc753983(v=ws.10).aspx

appcmd工具示例2--设定site compression:http://support.microsoft.com/kb/930909

下面的代码是使用上述类似的方式关闭site compression,IIS服务器中,默认情况下site compression是开启状态。

1.       Add code part to your webrole.cs

public override bool OnStart()

{

string cmd = string.Format(" set config /section:urlCompression /doStaticCompression:False");

string appcmdpath = @"d:\Windows\System32\inetsrv\appcmd.exe";

try

{

Process.Start(new ProcessStartInfo(appcmdpath, cmd));

Trace.TraceInformation("Success: turn off compression for static content in IIS.");

System.IO.File.AppendAllText("log.txt", DateTime.Now.ToString() + " | Success: turn off compression for static content in IIS.");

}

catch (Exception ex)

{

Trace.TraceError(ex.Message);

System.IO.File.AppendAllText("log.txt", DateTime.Now.ToString() + " | " + ex.Message + " | " + cmd);

//throw;

}

return base.OnStart();

}

2.       Do some change in service definition file:

<?xml version="1.0" encoding="utf-8"?>

<ServiceDefinition name="WindowsAzure7" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2014-01.2.3">

<WebRole name="WebRole1" vmsize="Small">

<Runtime executionContext="elevated" />

<Sites>

<Site name="Web">

……

小结:Azure Web Role中,如果需要设定IIS服务器,需要通过代码方式来调用appcmd,以实现特别需求的服务器功能。任何通过远程连接的手动修改都是不可取的,其随时可能失效。

时间: 2024-08-03 06:26:42

在Azure Web Role中自定义配置IIS服务器的相关文章

web.config文件自定义配置节的使用方法的一个简单例子

web web.config文件自定义配置节的使用方法的一个简单例子用来演示的程序名为MyApp,Namespace也是MyApp 1.编辑web.config文件 添加以下内容,声明一个Section <configSections>    <section name="AppConfig" type="MyApp.AppConfig, MyApp" /> </configSections>   声明了一个叫AppConfig的

asp.net中怎么配置IIS?

问题描述 asp.net中怎么配置IIS? 解决方案 解决方案二:http://msdn2.microsoft.com/zh-cn/library/6hy1xzbw(VS.80).aspx解决方案三:问的不怎么清晰啊,IIS6.0默认支持ASP.NET1.1,想要支持2.0的话到microsoft下个支持包就行了.如果是开发的话装个VS2005就支持2.0了.解决方案四:问题不明确,你要配置IIS的什么???是在ASP.NET代码中对IIS进行设置么?ASPNET用户默认情况下是没有这个权限的.

Spring MVC 原子学习法 之 web.xml 中的配置

Spring MVC  原子学习法 之  web.xml 中的配置 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 由上图可以看得出,Spring-MVC 应用的配置要从 JavaWeb 的配置

配置IIS服务器时需要注意的地方

介绍五种配置IIS服务器时需要注意的地方,把好安全关是所有网站都必须要做好的功课,如果服务器本身不安全,给网站带来的将是毁灭性的. 一.操作系统的安装 我这里说的操作系统以Windows 2000为例,高版本的Windows也有类似功能. 格式化硬盘时候,必须格式化为NTFS的,绝对不要使用FAT32类型. C盘为操作系统盘,D盘放常用软件,E盘网站,格式化完成后立刻设置磁盘权限,C盘默认,D盘的安全设置为Administrator和System完全控制,其他用户删除,E盘放网站,如果只有一个网

iis-win10下配置IIS服务器

问题描述 win10下配置IIS服务器 配置IIS服务器,按照固定操作完成以后,重启电脑,输入local host显示空白页是怎么回事啊?? 解决方案 IIS服务有没有正常的启动,端口是否侦听.返回的页面内容是什么

一个修改web.config中appSettings配置节的函数

web|函数 这个函数主要使用XmlDocument来解析web.config.并用SelectSingleNode()方法来定位要修改的配置节.要注意的是最后程序要Save(),所以,你的apsnet帐号必须对web.config拥有写权限. -------------------------------------------------------------------------------- /// <summary> /// 修改web.config文件appSettings配置

一个修改web.config中appSettings配置节的函数-Web_Service开发-.NE

这个函数主要使用XmlDocument来解析web.config.并用SelectSingleNode()方法来定位要修改的配置节.要注意的是最后程序要Save(),所以,你的apsnet帐号必须对web.config拥有写权限. -------------------------------------------------------------------------------- /// <summary> /// 修改web.config文件appSettings配置节中的Add里

win7下配置IIS服务器

网站爱好初学者必看的win7系统配置自己的IIS,可以在你自己的电脑上配置网站服务器发不到网上,下面就跟着我的步骤一起做吧100%成功. 步骤方法 1.点击开始-------控制面板这个就是打开的控制面板--点击默认程序进入下一步   2.下一步我们选择程序和功能---再下一步 3.到这里我们选择打开或关闭windows功能 4. 到这里我们找到internet信息服务 S2005 中,如果要调试站点的话,必须有"Windows身份验证" "摘要式身份验证" 是使用

如何配置IIS服务器?

网络的迅速发展使宽带走入寻常百姓家,广大网络爱好者也勇于尝试,在自己的机器上建设自己的网站,那么选择什么系统呢?Win 2000漏洞百出,Win 2003又专门为服务器设计不太适合普通的家用,而LINUX或UNIX系统在平时又是很少使用.现在我就给大家介绍一下在XP环境中利用IIS架构自己 的网站的方法. 利用Windows XP的组件就可以满足建站的要求,而且安全性能不错. 安装IIS 在Windows XP 专业版中,IIS并不是默认安装的,而是作为可选的组件,现在我们要建立一个站点,就可以