IIS Express能夠說是.NET web開發者必用的服務器,日日夜夜都和它打交道。一直以來,除了遇到什麼點什麼問題,不多會去關注過它。html
今天看到之前轉載的一篇博客,就再次溫故下,主要包含IIS Express的簡介與安裝、配置、命令行使用。web
若是不是在開發環境,須要手動如安裝,如今最新的版本已是10.0.express
IIS 7.5 Express下載地址:https://www.microsoft.com/zh-cn/download/details.aspx?id=1038服務器
IIS 8.0 Express下載地址:https://www.microsoft.com/zh-cn/download/details.aspx?id=34679網絡
IIS 10.0 Express下載地址:https://www.microsoft.com/zh-cn/download/details.aspx?id=48264app
使用 IIS 10.0 Express 的好處包括:
•在生產服務器上運行的同一 web 服務器如今可用於開發計算機。
•無需管理權限,便可執行大多數任務。
•IIS Express 可在 Windows 7 Service Pack 1 及全部更高版本的 Windows 上運行。
•不少用戶可在同一臺計算機上獨立做業。編輯器
IIS Express是爲開發人員優化的輕量級、自包含版本的IIS。IIS Express使使用當前最新版本的IIS來開發和測試網站變得容易。它具備IIS 7及以上的全部核心功能,以及爲簡化網站開發而設計的附加功能。工具
IIS Express源於IIS 7及以上,支持IIS的核心特性,但有一些關鍵區別。一個重要的區別是工做進程的管理。在IIS,Windows進程激活服務(Windows Process Activation Service【WAS】)是靜默激活和停用的Web應用程序,用戶沒有直接控制。在IIS Express中,不存在WAS,用戶可徹底控制應用程序的激活和停用。啓動後在系統托盤中顯示,已經運行的網站能夠手動去啓用和中止。Hostable Web Core (HWC)是一個IIS API,可用來編寫獨立的Web服務器,但不被WAS管理。IIS Express被設計爲在HWC上的一個殼。測試
如下表格主要展現了IIS and IIS Express的主要區別:優化
Area |
IIS |
IIS Express |
---|---|---|
發佈機制 |
與操做系統一塊兒發佈 |
可獨立發佈,內含與WebMatrix,但可分開安裝 |
支持的Windows版本 |
Windows Vista and Windows 7的特定版本,Windows Server 2003, 2008 and 2008 R2及以上的大多數操做系統 |
Windows XP, Vista, Windows 7全部版本,Windows Server 2008 and 2008 R2及以上全部版本 |
支持的.NET Framework |
v2.0 SP1以上 |
v2.0 SP1 以上或更新版本(須要.NET 4.0). |
支持的程序設計語言 |
傳統ASP, ASP.NET和PHP |
傳統ASP, ASP.NET和PHP |
進程模型 |
Windows Process Activation Service (WAS) 自動管理已設置的網站 |
由用戶加載或終止網站 |
Hosted WebCore (或Hostable Web Core) 支持 |
支持 |
支持. IIS Express已實現爲HWC的上層應用. |
支持的協議 |
HTTP, FTP, WebDAV, HTTPS, 與WCF (包括基於TCP, Named Pipes和MSMQ) |
HTTP, HTTPS, 與基於 HTTP的WCF |
支持非系統管理員模式 |
WAS必須以系統管理員權限運行 |
標準用戶便可執行大多數工做. |
支持多開發者 |
不支持 |
Yes. 配置文件、設置、Web content都是基於每用戶本身維護 |
Visual Studio 支持 |
Yes |
VS 2010 SP1以上,VS 2008 可手動配置 |
運行時的擴展 |
|
URL Rewrite 與FastCGI。 IIS Express已內置 |
管理工具 |
IIS Manager, appcmd.exe |
Appcmd.exe |
系統托盤 |
None |
Yes |
內建的IIS 模塊(驗證、受權、壓縮等功能) |
Yes |
Yes |
官方英文原版:https://docs.microsoft.com/zh-cn/iis/extensions/introduction-to-iis-express/iis-express-overview
iis express早期的時候,須要使用到WebMatrix,如今WebMatrix這個可憐的娃已經被軟妹子拋棄了,看來仍是功夫不夠好 ,呵呵,如今也很少介紹
在vs中web項目運行時,自動啓用IIS express,以系統托盤的方式展示,在圖標上右鍵,便可查看在運行的網站,可手動中止運行;另外,還能夠經過命令行的方式運行。
示例:win7 vs2013
打開方式: 開始=》全部程序=》Visual Studio 2013 =>Visual Studio Tools=>VS2013 開發人員命令提示
也可在該目錄下找到:C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\Shortcuts
經常使用命令行:
1.查看網站列表
C:\Program Files (x86)\Microsoft Visual Studio 12.0>"C:\Program Files\IIS Express\appcmd.exe" list site
2.啓動網站
C:\Program Files (x86)\Microsoft Visual Studio 12.0>"C:\Program Files\IIS Express\iisexpress.exe" /siteid:96
窗口中可看到瀏覽網站的開始、結束、調用網址、HTTP狀態
注:可將「C:\Program Files\IIS Express」加入「系統變量」Path中,就能夠直接執行iisexpress.exe和appcmd.exe。
3.啓動一個臨時網站
有些狀況下,咱們須要啓動一個臨時的網站(好比快速建立一個臨時服務器等),即可以用相似的命令行來建立:
iisexpress /path:<網站目錄> /port:<端口> /clr:<CLR版本,V2.0|V4.0>
iis express會複製一份配置文件到臨時目錄,並變動其中的站點信息後再啓動,所以不會影響到本機已經配置的網站。
C:\Program Files (x86)\Microsoft Visual Studio 12.0>"C:\Program Files\IIS Express\iisexpress.exe" /path:"G:\01code\04MVC\01bamin\Code\BaminSolution\BM.Admin" /port:8899 /clr:v4.0 /systray:true
默認狀況下IIS Express使用的配置文件位於「個人文檔」中,路徑以下:「個人文檔\IIS Express\Config」。其中,applicationhost.config 是核心的配置文件,它用於承載站點的定義、應用程序和應用程序池以及整個WEB服務器的配置。因爲是放在個人文檔中的,因此修改它不須要管理員權限,意味着能夠直接修改。在修改後,下次啓動應用程序就會起效。
在applicationhost.config內容中,<system.applicationHost> 用於定義網站和應用程序池。默認狀況下,其內容以下:
<system.applicationHost> <applicationPools> <add name="Clr4IntegratedAppPool" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" /> <add name="Clr4ClassicAppPool" managedRuntimeVersion="v4.0" managedPipelineMode="Classic" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" /> <add name="Clr2IntegratedAppPool" managedRuntimeVersion="v2.0" managedPipelineMode="Integrated" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" /> <add name="Clr2ClassicAppPool" managedRuntimeVersion="v2.0" managedPipelineMode="Classic" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" /> <add name="UnmanagedClassicAppPool" managedRuntimeVersion="" managedPipelineMode="Classic" autoStart="true" /> <applicationPoolDefaults managedRuntimeLoader="v4.0"> <processModel /> </applicationPoolDefaults> </applicationPools> <!-- The <listenerAdapters> section defines the protocols with which the Windows Process Activation Service (WAS) binds. --> <listenerAdapters> <add name="http" /> </listenerAdapters> <sites> <site name="WebSite1" id="1" serverAutoStart="true"> <application path="/"> <virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%\WebSite1" /> </application> <bindings> <binding protocol="http" bindingInformation=":8080:localhost" /> </bindings> </site> <applicationDefaults applicationPool="Clr4IntegratedAppPool" /> <virtualDirectoryDefaults allowSubDirConfig="true" /> </sites> <webLimits /> </system.applicationHost>
IIS Express 內建了五個應用程序池,分別對應.Net 2.0/4.0的集成/經典模式、以及一個非託管程序池。默認的程序池版本有 <spplicationPoolDefaults> 節來配置。<sites> 節用於配置網站。網站的默認應用程序池和虛擬目錄默認配置由 <applicationDefaults> 和 <virtualDirectoryDefaults> 節點配置。以上的節點默認狀況下咱們並不須要太多關注,由於大多數狀況下咱們須要關注的只有 <sites> 下的 <site> 節點,這裏保存了網站、應用程序的定義,纔是咱們須要真正關心的。
【1】.每一個 <site> 就是一個網站。
serverAutoStart 設置了是否隨着 IIS Express的啓動而自動啓動。若是設置爲true,那麼每次 IIS Express 啓動都會自動加載(若是沒有指定網站的話),不然只有以指定特定網站的模式運行時纔會加載。
使用IIS Express加載特定網站的語法一: IISExpress.exe /site:<站點名>
使用IIS Express加載特定網站的語法二: IISExpress.exe /siteid:<id>
【2】.<site> 下的<bindings>設置了這個站點的綁定信息。
節點下的每一個<binding>都是一個端口綁定信息。典型的綁定配置以下:<binding protocol="http" bindingInformation="*:8080:localhost" />
protocol 指定了綁定的協議類型(IIS Express內建了 HTTP 和 HTTPS兩種協議支持),而「*:8080:localhost」則指定的綁定的具體信息,它有三個部分組成:「綁定的IP:端口:主機名」。
默認狀況下,綁定到任何本地IP、非保留端口、綁定到localhost。
IIS Express 默認只支持本地鏈接,不能用ip去訪問。
注意,修改配置文件後,在命令行窗口輸入q退出,而後從新加載才生效。【在同一機器測試】
另外,在書上看到另一種局域網訪問的配置,這裏僅記錄下
開啓外部鏈接 netsh http add urlacl url=http://*:{端口號}/ user=everyone 關閉外部鏈接 netsh http delete urlacl url=http://*:{端口號}/
【3】 <application> 這個節設置了網站的應用程序
每一個網站都須要至少一個映射路徑爲「/」應用程序(它映射到根目錄)。除此以外,你能夠繼續添加並行的不一樣路徑的 <application> ,這就相似於IIS中的網站裏配置的應用程序。
例如,我須要添加一個單獨的應用程序 - 論壇,映射到根目錄下的bbs目錄,那麼我就能夠這樣配置:
<site name="BM.Admin(1)" id="96"> <application path="/" applicationPool="Clr4IntegratedAppPool"> <virtualDirectory path="/" physicalPath="G:\01code\04MVC\01bamin\Code\BaminSolution\BM.Admin" /> </application> <application path="/bbs" applicationPool="Clr2IntegratedAppPool"> <virtualDirectory path="/" physicalPath="<此應用程序的根目錄>" /> <virtualDirectory path="/content/" physicalPath="</bbs/content/目錄對應的虛擬目錄>" /> </application> <bindings> <binding protocol="http" bindingInformation="*:44545:localhost" /> </bindings> </site>
【4】<virtualDirectory> 設置了目錄的映射信息
參見上面展現的代碼。在每一個<application>節下,必須至少存在一個 path="/" 的 virtualDirectory,它表明了這個目錄映射的位置。除此以外,能夠手動添加多個映射的路徑不一樣的虛擬目錄。
一份關於site詳細配置放在文章尾部,做爲附錄以便之後使用
IIS Express設計是爲了不須要管理員權限就能完成大部分操做的,可是個別狀況下它會要須要管理員權限才能運行。這類的限制包括:
綁定到了保留的端口(一般位於1024如下的端口,如80、8八、443等);
沒有綁定localhost,而是綁定了域名或其它內容;
使用了HTTPS,可是端口不在44300-44399範圍內;
使用了本身的SSL證書的HTTPS。
【1】使用了保留的端口
一般操做系統的HTTP.sys(網絡內核)將1024如下的端口設計爲保留端口,若是IIS Express須要綁定到這些端口,則須要它擁有管理員權限,不然就會失敗。錯誤相似這樣:
反映到系統的日誌中,就是這樣的錯誤:
要解決這個問題,很簡單,只要將端口綁定到非保留端口便可(大於1024),或使用管理員身份啓動它備註1。
【2】綁定了其它域名
默認狀況下,IIS Express只能綁定到 localhost。若是須要綁定到具體的域名供外部訪問而又沒有解決方案,那麼就會遭遇到失敗的問題。
要解決,也很簡單——就是使用管理員身份啓動它備註1。
【3】使用了HTTPS,可是端口不在 44300-44399以內
IIS Express用於承載HTTPS站點測試時,端口會限制在44300-44399以內,這一樣是操做系統的限制。若是超過了這個範圍,則須要以管理員身份啓動它才能正常工做備註1。
【4】使用了本身的SSL證書的HTTPS
IIS Express默認會安裝一個測試的自簽名證書用於開發,這容許開發人員在沒有SSL證書的狀況下進行開發。可是若是站點使用了本身的SSL證書,則會致使IIS Express須要管理員身份才能啓動備註1。
<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>
1.VS2015 IIS Express 沒法啓動 解決辦法
來自http://blog.csdn.net/wei123456/article/details/53470399
在VS2015啓動調試時,老是提示「IIS Web Express 沒法啓動」的錯誤,一直都好好的,忽然就不行了.
用記事本或者其餘什麼文本編輯器,打開項目的.csproj文件,定位到<WebProjectProperties>,把關於IIS的配置<DevelopmentServerPort>、<DevelopmentServerVPath>、<IISUrl>屬性都清空,<AutoAssignPort>爲True,保存,從新用VS2015打開項目,而後Ctrl+F5,成功!
原理就是讓VS2015重置一下啓動配置。
2.運行打開IIS
輸入 inetmgr
閱讀的相關文章:
http://www.cnblogs.com/xcsn/archive/2012/12/28/2837424.html
https://www.cnblogs.com/leleroyn/archive/2011/02/25/1965016.html
http://developer.51cto.com/art/201103/250082.htm
https://www.cnblogs.com/zswto999/archive/2012/12/31/2841191.html