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

相关文章
相关标签/搜索