IIS Express總結


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

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

一、介紹

1.安裝

  如果不是在開發環境,需要手動如安裝,現在最新的版本已經是10.0.

   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=48264

使用 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

二、使用和配置

  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、88、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>


 三、常見問題

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM