最近在做一些Web方面调研的时候我基本上都不用 IIS了,IIS Express 实在是很方便,由于目前还是 BETA版本,有些功能界面上还看不见,网上资料也很少,所以我把我之前的一点经验写出来。
关注 IIS Express 的最初原因是希望将我们的一个产品部署到 Windows XP Professional上,要知道 2003 Server的价格和 Pro差距还是很大的,对于大批量部署的产品来说,这对产品利润影响相当大。由于我们在开发时使用了 MVC,这个在 XP Pro自带的 IIS5.1上部署,一方面程序要做相应的处理,还需要部署 URL Rewriter之类的东西,相当麻烦,解决了服务器费用,只怕又会带来开发人员出差的费用。
有了 IIS Express,问题基本可全部解决,主要关注的是下面的几个问题:
1. 允许远程访问
2. 要可以支持创建虚拟目录
3. 可以支持运行多个 Web Application
4. 我们的产品是在学校的局域网部署,性能上应满足至少几十人并发要求
1. 安装部署
下载地址:http://www.microsoft.com/web/webmatrix/ , IIS Express 是随 Web Matrix 一起发布的,安装Microsoft Web Platform Installer 后,就可以选择安装 IIS Express(英文版中有 IIS Express可以选择,中文版中直接选 Web Matrix)。
介绍可参考Scott博客:http://weblogs.asp.net/scottgu/archive/2010/06/28/introducing-iis-express.aspx
IIS Express overview:http://learn.iis.net/page.aspx/868/iis-developer-express-overview/
从开始菜单运行 Web Matrix 后默认会自动启动一个Web 站点,管理界面比较简单,可以直接将某个目录创建为Web站点。
实际我在使用的时候,基本都是以命令行方式运行的,一般我只用到下面几个参数:
iisexpress [/config:config-file] [/site:site-name] [/systray:boolean]
配置文件可直接基于默认的配置文件修改, 默认使用的配置文件是在 [我的文档]\IISExpress8\config\applicationhost.config
我现在的用法是直接将 Web Matrix所在目录打包放到光盘上,配置文件随应用程序发布,然后分别创建两个批处理文件,用以启动和停止IIS Express服务,非常方便,批处理内容大概就像这样:
启动:start F:\Projects\MicrosoftWebMatrix\iisexpress /config:F:\Projects\XXX\applicationhost.config /systray:true /site:MTLOralDemo
停止:TASKKILL /F /IM iisexpress.exe /T
其他机器根本不需要再安装Web Matrix,,只要装了.Net Framework直接运行就可以了。
2. 远程访问设置
找到配置文件中 sites\site\bindings 默认是绑定到 localhost 80端口,如果需要其他机器可以访问,绑定到指定IP地址就可以了。
<binding protocol="http" bindingInformation="*:8080:192.168.79.166" />
3. 虚拟目录设置
类似于下面这样:
<site name="AppService" id="1280170558">
<application path="/" applicationPool="Clr2IntegratedAppPool">
<virtualDirectory path="/" physicalPath="C:\IISExpress\DemoApp\empty" />
</application>
<application path="/AppService" applicationPool="Clr2IntegratedAppPool">
<virtualDirectory path="/" physicalPath="C:\IISExpress\DemoApp\AppService" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:8088:192.168.79.166" />
</bindings>
</site>
我尝试过多个virtualDirectory节点,但发现Web Application不能正常工作,而且多个虚拟目录也不是使用独立的 Web.config,后来通过配置application 解决。
如果站点有Spring之类的东西,运行时会出现错误,请将 applicationPool 配置成 Clr2ClassicAppPool。
4. 配置多个站点
多个站点只要配置多个 site 节点就可以了,具体配置都差不多,但多个站点需要使用不同的端口。
如果需要同时运行多个站点,在批处理中再增加几条修改相应的参数就行了,相当于同时运行多个 iis express 实例。
5. 性能测试结果
分别做了以下测试,测试结果性能满足要求:
1. 写了个简单测试页面,使用Load Runner 进行200路并发压力测试,进行了2小时。
2. 正式产品部署,我们的产品总共运行了9个 iis express进程,分别侦听在8080~8089端口,我们整个部门几十个人同时模拟用户访问站点并实际使用。