最近在使用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節點,就是網站的配置。(默認是放在我的文檔下的,這解決了沒有管理員權限修改的問題)

<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
PS:現在對於IISExpress學習還不透徹,先這樣,后續再補充