• 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.0Common7ToolsShortcuts

      常用命令行:

      1.查看网站列表

    C:Program Files (x86)Microsoft Visual Studio 12.0>"C:Program FilesIIS Expressappcmd.exe" list site

         

      2.启动网站

    C:Program Files (x86)Microsoft Visual Studio 12.0>"C:Program FilesIIS Expressiisexpress.exe" /siteid:96

      

      窗口中可看到浏览网站的开始、结束、调用网址、HTTP状态

      注:可将“C:Program FilesIIS 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 FilesIIS Expressiisexpress.exe" /path:"G:1code4MVC1baminCodeBaminSolutionBM.Admin" /port:8899 /clr:v4.0 /systray:true

      

      2.配置文件

        默认情况下IIS Express使用的配置文件位于“我的文档”中,路径如下:“我的文档IIS ExpressConfig”。其中,applicationhost.config 是核心的配置文件,它用于承载站点的定义、应用程序和应用程序池以及整个WEB服务器的配置。由于是放在我的文档中的,所以修改它不需要管理员权限,意味着可以直接修改。在修改后,下次启动应用程序就会起效。

       在applicationhost.config内容中,<system.applicationHost> 用于定义网站和应用程序池。默认情况下,其内容如下:

    复制代码
    <system.applicationHost>
        <applicationPools>
            <add name="Clr4IntegratedAppPool" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated" CLRConfigFile="%IIS_USER_HOME%configaspnet.config" autoStart="true" />
            <add name="Clr4ClassicAppPool" managedRuntimeVersion="v4.0" managedPipelineMode="Classic" CLRConfigFile="%IIS_USER_HOME%configaspnet.config" autoStart="true" />
            <add name="Clr2IntegratedAppPool" managedRuntimeVersion="v2.0" managedPipelineMode="Integrated" CLRConfigFile="%IIS_USER_HOME%configaspnet.config" autoStart="true" />
            <add name="Clr2ClassicAppPool" managedRuntimeVersion="v2.0" managedPipelineMode="Classic" CLRConfigFile="%IIS_USER_HOME%configaspnet.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:1code4MVC1baminCodeBaminSolutionBM.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 FilesIIS 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

  • 相关阅读:
    《程序猿面试宝典3》大量错误(50+)纠正表
    STM32定时器的预装载寄存器与影子寄存器之间的关系【转】
    Linux虚拟内存和物理地址的理解【转】
    UNIX系统的显示时间何时会到尽头
    assert函数用法总结【转】
    Sizeof与Strlen的区别【转】
    C语言预处理器命令详解【转】
    C#预处理器指令【转】
    I2C总线信号时序总结【转】
    用状态机实现键盘消抖【转】
  • 原文地址:https://www.cnblogs.com/cuihongyu3503319/p/11635023.html
Copyright © 2020-2023  润新知