最近在使用XP的IIS发布Asp.Net MVC3的项目,但是发现一个很头疼的一个问题,在IIS指定虚拟目录来发布网站发布不了,以前发布Webfrom项目则不会有这样的问题,应该是跟路由路径有关系,导致每次都是从网站根节点算起,而不是从指定的虚拟目录算。如果是发布在默认网站下,也就是直接右击默认网站,将主目录指定到网站路径,再在配置下添加aspnet_isapi.dll映射,这样是可以发布成功的。但是这样的话,一次就只能发布一个站点了。以后项目应该都会使用MVC写的,每次都更改主目录太不方便了。后来朋友那提到了IISExpress,就开始了使用和学习,发现这真是个好东西,有点类似tomcat的感觉,值得Net程序员兴奋啊,未来必将使用广泛,下面我总结一些关于IISExpress的使用。
IIS 7.5 Express官方下载地址: http://www.microsoft.com/zh-cn/download/details.aspx?id=1038
已经有IIS 8 Express发布了,但是不支持XP,所以现在仍然选择使用IIS 7.5 Express,很多网页上都是说IIS Express 7.5,我其实也喜欢这样叫,感觉比较顺口,但是其实是不对的,因为这个并不是Express的版本号,而是IIS的版本号。官网上是这样描述IIS 7.5 Express的,兼具IIS 7.5的强大功能与轻型Web(例如ASP.NET开发服务器,也称为"Cassini")的便利,可以增强在Windows上开发和测试Web应用程序的能力。(当然这个叫法也不用太在意,但这里提出来,因为个人一开始是误解的,知道就行了)
安装完上面的下载文件后,你可以在C:\Program Files\IIS Express看到安装文件,主要注意iisexpress.exe,这是IISExpress的启动文件。点击后会启动一个cmd和托盘程序。右击托盘程序可以看到如下图,这个是默认的站点地址,点击就可以打开这个站点网页。遗憾的事,这个网页没有像tomcat一样给我们提供管理站点的功能,而是提供一些链接指向 WebMatrix网站,这个是一个可以创建网站和用IISExpress发布站点的工具,但是感觉对于专业开发来说不实用,所以个人并没有使用,而是手工改配置文件。
但是这个站点是在哪里配置的呢,我们可以在“我的文档”下看到一个“IISExpress”的文件夹,打开下面的Config\applicationhost.config文件,找到sites节点,就是网站的配置。(默认是放在我的文档下的,这解决了没有管理员权限修改的问题)
Site详细配置
<sites><!-- site 站点 如果启动了右击托盘IISExpress就能看到,可以在sites下面添加多个site节点 serverAutoStart=true 是指定站点是否随服务器启动,但是这个属性我并没有看到作用,不管是否设置都是启动第一个站点 --><site name="WebSite1" id="1" serverAutoStart="true" ><!-- application应用程序 和在iis中添加的应用程序一样的--><application path="/"><!-- virtualDirectory虚拟目录 %IIS_SITES_HOME%是C:\Program Files\IIS Express\ --><virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%\WebSite1" /></application><!-- 可以添加多个path不重复的application 下面applicationDefaults会默认应用程序池,但是也可以指定应用程序池--><!-- 这里有个问题如果applicationPool是Clr2IntegratedAppPool 但sites的applicationDefaults是Clr4IntegratedAppPool,则这个虚拟目录就不能被启动访问目前我只能通过将applicationDefaults设置为Clr2IntegratedAppPool才可以启动,并不清楚怎么给不同网站 指定不一样的程序池并启动--><application path="/test" applicationPool="Clr2IntegratedAppPool"><!-- 可以添加多个虚拟目录 和iis中添加虚拟目录一样--><virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%\WebSite1" /><virtualDirectory path="/testvir" physicalPath="%IIS_SITES_HOME%\WebSite1" /></application><bindings><!-- binding站点绑定信息 protocol有http和https两种 bindingInformation指定绑定具体信息 :8080:localhost=>:端口:主机名" --><binding protocol="http" bindingInformation=":8080:localhost" /><!-- 同一个网站绑定多个端口 --><binding protocol="http" bindingInformation=":8899:localhost" /><!-- 通常在IIS发布的网站 用localhost 也一定可以用127.0.01访问 但是这里不行,必须手工绑定 --><binding protocol="http" bindingInformation=":8080:127.0.0.1" /><!-- 局域网对应的IP地址也是需要自己绑定的 局域网其他用户才能通过ip访问--><binding protocol="http" bindingInformation=":8080:192.168.230.128" /></bindings></site><!-- 可以添加多个site节点 但是必须是name和id 都不重复的--><site name="WebSite2" id="2" serverAutoStart="true" ><application path="/test"><virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%\WebSite1" /></application><bindings><binding protocol="http" bindingInformation=":8080:localhost" /></bindings></site><siteDefaults><!-- %IIS_USER_HOME%是"我的文档"的路径 Logs下是访问站点的记录 --><logFile logFormat="W3C" directory="%IIS_USER_HOME%\Logs" /><traceFailedRequestsLogging directory="%IIS_USER_HOME%\TraceLogFiles" enabled="true" maxLogFileSizeKB="1024" /></siteDefaults><!--applicationDefaults 指定站点的默认应用程序池 在sites上面有applicationPools节点,可以在那看到有五个应用程序池,分别是.Net2.0/4.0的集成/经典模式、以及一个非托管程序池--><applicationDefaults applicationPool="Clr4IntegratedAppPool" /><virtualDirectoryDefaults allowSubDirConfig="true" /></sites>
可以通过Cmd来启动iisexpress,如果有错误会有提示。输入iisexpress.exe -help ,可以看到一些命令帮助
常用的有两种命令方式启动iisexpress:
1)iisexpress.exe /site:<站点名> /config:<配置文件路径> /systray:<boolean是否启动系统托盘应用,默认true>
如:C:\Program Files\IIS Express>iisexpress.exe /site:website2 /config:"C:\Documents
and Settings\Administrator\My Documents\IISExpress\config\applicationhost.confi
g" /systray:true
这些参数都是可选的,一般是在配置文件中配置过的站点
2)iisexpress.exe /path:<应用程序路径> /port:<端口号,默认8080> /clr:<CLR版本:v2.0|v4.0> /systray:<boolean是否启动系统托盘应用,默认true>
这种方式常用来临时指定一个网站,而不需要在配置文件中配置
C:\Program Files\IIS Express>iisexpress.exe /path:"C:\Program Files\IIS Express\
WebSite1" /port:8899 /clr:v4.0 /systray:true
Vs2010的SP1 可以支持IISExpress
具体使用请参考:http://www.cnblogs.com/haogj/archive/2011/01/08/1930525.html
PS:现在对于IISExpress学习还不透彻,先这样,后续再补充