IIS Express總結

  IIS Express能夠說是.NET web開發者必用的服務器,日日夜夜都和它打交道。一直以來,除了遇到什麼點什麼問題,不多會去關注過它。html

  今天看到之前轉載的一篇博客,就再次溫故下,主要包含IIS Express的簡介與安裝、配置、命令行使用。web

1、介紹

1.安裝

  若是不是在開發環境,須要手動如安裝,如今最新的版本已是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 上運行。
•不少用戶可在同一臺計算機上獨立做業。
編輯器

2.簡介

  IIS Express是爲開發人員優化的輕量級、自包含版本的IIS。IIS Express使使用當前最新版本的IIS來開發和測試網站變得容易。它具備IIS 7及以上的全部核心功能,以及爲簡化網站開發而設計的附加功能。工具

3.IIS Express和IIS  

  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

2、使用和配置

  iis express早期的時候,須要使用到WebMatrix,如今WebMatrix這個可憐的娃已經被軟妹子拋棄了,看來仍是功夫不夠好 ,呵呵,如今也很少介紹

  1.啓動和命令行

  在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

  

 

  2.配置文件

    默認狀況下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詳細配置放在文章尾部,做爲附錄以便之後使用

 

  3.關於管理員身份啓動

  IIS Express設計是爲了不須要管理員權限就能完成大部分操做的,可是個別狀況下它會要須要管理員權限才能運行。這類的限制包括:

  綁定到了保留的端口(一般位於1024如下的端口,如80、8八、443等);

  沒有綁定localhost,而是綁定了域名或其它內容;

  使用了HTTPS,可是端口不在44300-44399範圍內;

  使用了本身的SSL證書的HTTPS。

  【1】使用了保留的端口

  一般操做系統的HTTP.sys(網絡內核)將1024如下的端口設計爲保留端口,若是IIS Express須要綁定到這些端口,則須要它擁有管理員權限,不然就會失敗。錯誤相似這樣:

image

  反映到系統的日誌中,就是這樣的錯誤:

image

  要解決這個問題,很簡單,只要將端口綁定到非保留端口便可(大於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。

 

  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>


 3、常見問題

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

相關文章
相關標籤/搜索