iisexpress
song

IIS Express 的使用指南

IIS Express 是 Microsoft Internet Information Services (IIS) 的精简版,主要用于开发和测试阶段。它提供了一种轻量级的方式,让开发者能够在本地运行和调试网站,而无需配置完整的 IIS 环境。

安装 IIS Express

方法1: 独立安装

方法2: 使用 Visual Studio 自带的 IIS Express

  • IIS Express 通常会与 Visual Studio 一起安装。无需额外安装。

配置环境变量

IIS Express 提供了命令行工具 iisexpress.exe,如要在任意目录使用需配置PATH环境变量。

1
C:\Program Files\IIS Express\

检查是否配置成功,打开CMD或者PowerShell, 入以下命令检查 iisexpress 是否可用

1
iisexpress /?

如果显示帮助信息,则说明环境变量已经配置成功。

使用 VS 配置时无需额外环境变量

如果你是通过 Visual Studio 使用 IIS Express(默认配置),则无需手动配置环境变量。Visual Studio 会直接调用其内部配置,并自动找到 iisexpress.exe

启动 IIS Express

从命令行启动

IIS Express 提供了命令行工具 iisexpress.exe,用于启动和配置站点。

1
iisexpress /path:c:\mywebsite /port:8080
  • /path:指定站点的物理路径。
  • /port:指定站点监听的端口号。

在 Visual Studio 中启动

  • 打开 Visual Studio。
  • 加载项目。
  • 点击顶部工具栏的绿色“启动”按钮。
  • 默认会使用 IIS Express 运行项目(可以通过项目属性切换为其他 Web 服务器)。

配置 IIS Express

IIS Express 使用配置文件来管理站点和设置。

  • 全局配置文件(对所有站点生效):
    1
    %USERPROFILE%\Documents\IISExpress\config\applicationhost.config
  • 每个站点的配置(可以在 Visual Studio 项目中找到, 项目目录的 .vs 文件夹中,路径类似:)
    1
    .vs\config\applicationhost.config

日常使用场景

  1. 运行静态网站
    1
    iisexpress /path:c:\mywebsite /port:8080
    打开浏览器访问 http://localhost:8080 查看静态网站效果。
  2. 调试 ASP.NET 项目,在 Visual Studio 中加载项目并启动调试,默认使用 IIS Express。
  3. 测试 HTTPS 使用自签名证书测试 HTTPS,配置文件中增加 HTTPS 绑定。
  4. 运行多个站点 可以在配置文件中添加多个站点:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <site name="Site1" id="1">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
    <virtualDirectory path="/" physicalPath="C:\WebSites\Site1" />
    </application>
    <bindings>
    <binding protocol="http" bindingInformation="*:8081:localhost" />
    </bindings>
    </site>
    <site name="Site2" id="2">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
    <virtualDirectory path="/" physicalPath="C:\WebSites\Site2" />
    </application>
    <bindings>
    <binding protocol="http" bindingInformation="*:8082:localhost" />
    </bindings>
    </site>

管理日志和诊断

IIS Express 会生成日志文件,用于记录请求和错误信息。
日志默认路径:

1
%USERPROFILE%\Documents\IISExpress\Logs

日志类型:

  • Request Logs:记录 HTTP 请求信息。
  • Error Logs:记录错误信息。

常用命令和参数

1. IIS Express 命令行工具 (iisexpress)

iisexpress 是启动和运行 IIS Express 的主要命令行工具,用于启动 Web 应用、指定配置文件、配置端口等。它是开发过程中常用的工具。

命令 功能
iisexpress 默认启动 IIS Express,读取 applicationhost.config 中的配置。
iisexpress /? 查看所有可用的 IIS Express 命令及其用法。
iisexpress /clr:<version> 指定使用的 .NET CLR 版本。比如,iisexpress /clr:v4.0 用于使用 .NET Framework 4.0 版本。netcore项目不适用。
iisexpress /path:<path> 指定站点的物理路径,例如:iisexpress /path:C:\MyWebsite
iisexpress /port:<port> 指定要绑定的端口,例如:iisexpress /port:8080
iisexpress /config:<path> 使用指定的配置文件启动 IIS Express,例如:iisexpress /config:C:\Config\applicationhost.config
iisexpress /site<site_name> 启动指定名称的站点,/site 指定配置文件中定义的站点名称
iisexpress /trace:<level> 设置调试级别,例如 iisexpress /trace:info 用于输出详细的调试信息
iisexpress /systray:false 禁用系统托盘图标显示,例如:iisexpress /systray:false
  • 启动站点并指定端口
    1
    iisexpress /path:C:\MyWebsite /port:8080
  • 启动指定站点并使用特定配置文件
    1
    iisexpress /config:C:\MyConfig\applicationhost.config /site:MySite
  • 使用 HTTPS 启动站点 启动路径为 C:\SecureSite 的站点,并通过 HTTPS 的 44300 端口访问。
    1
    iisexpress /path:C:\SecureSite /port:44300 /protocol:HTTPS
  • 启动指定版本的 .NET CLR 使用 .NET Framework 4.0 版本启动站点
    1
    iisexpress /clr:v4.0 /path:C:\MyWebApp

2. AppCmd 命令行工具 (appcmd)

AppCmd 是用于管理 IIS(Internet Information Services) 的命令行工具,能够执行站点、应用程序、虚拟目录等管理操作。它适用于 IIS 7.0 及更高版本,包括 IIS Express,并且支持管理 Web 服务器配置和运行时设置。

  • Site(站点) 是 Web 服务器中的顶级实体,负责 Web 请求的接收和路由。每个站点都可以绑定到一个 IP 地址和端口。
  • App(应用程序) 是站点下的一个子单元,它是一个 Web 应用程序,处理站点的特定 URL 路径下的请求。每个站点可以包含多个应用程序。
  • VDir(虚拟目录) 是应用程序或站点中的一个映射,指向某个物理路径。虚拟目录使得站点或应用程序可以访问和呈现文件系统中的其他资源。

示例: 假设我们有一个站点 MySite,它包含以下内容:

  • **站点 MySite**:绑定到 http://localhost:8080
  • **应用程序 App1**:映射到 http://localhost:8080/app1,物理路径是 C:\MySite\App1
  • **虚拟目录 Docs**:在 MySite 下,映射到 C:\MySite\Documents,可以通过 http://localhost:8080/docs 访问。

在这个例子中,MySite 是一个站点,它包含了 App1 应用程序以及一个虚拟目录 DocsApp1 处理 /app1 路径下的请求,而 Docs 提供了一个虚拟目录的方式访问服务器上的文件资源。

它们的关系与区别

概念 定义 功能 层次关系 适用场景
Site Web 服务器的顶级实体,负责接收 HTTP 请求并将它们路由到应用程序或虚拟目录。 提供绑定信息(如端口、协议)和站点配置,包含应用程序和虚拟目录。 顶级实体,一个站点可以包含多个应用程序和虚拟目录。 需要提供 HTTP 服务的完整 Web 应用。
App 运行在站点下的 Web 应用,处理请求并执行应用程序逻辑。 处理 HTTP 请求,具有自己的物理路径和配置(如 web.config)。 每个站点可以包含多个应用程序。 定义业务逻辑、数据处理等功能的 Web 应用。
VDir 虚拟路径到物理路径的映射,扩展现有站点或应用程序的资源。 映射 URL 路径到物理文件系统路径,通常用于共享或组织站点/应用中的资源。 虚拟目录可以附加到站点或应用程序中。 用于提供文件、静态资源等共享资源访问。
与这些相关或类似的其他概念
  • Application Pool(应用池)
  • Handler(处理程序)
  • Module(模块)
  • Web.config(Web 配置文件)
  • Virtual Path(虚拟路径)
list命令
命令 描述 示例
appcmd list site 列出所有网站及其状态。 appcmd list site
appcmd list app 列出所有应用程序。 appcmd list app /site.name: "Default Web Site"
appcmd list vdir 列出所有虚拟目录。 appcmd list vdir /site.name: "Default Web Site"
appcmd list apppool 列出所有应用程序池。 appcmd list apppool
appcmd list config 显示指定配置文件的信息,如 web.configapplicationHost.config 文件中的配置信息。 appcmd list config /section:system.applicationHost
网站(Site)管理
命令 描述 示例
appcmd add site 添加一个新的站点。 appcmd add site /name: "MySite" /bindings:http/*:80:localhost /physicalPath:"C:\MySite"
appcmd delete site 删除指定的站点。 appcmd delete site /site.name: "MySite"
appcmd stop site 停止指定的站点。 appcmd stop site /site.name: "MySite"
appcmd start site 启动指定的站点。 appcmd start site /site.name: "MySite"
appcmd recycle apppool 回收指定的应用程序池。 appcmd recycle apppool /apppool.name: "MyAp
应用程序池(App Pool)管理
命令 描述 示例
appcmd add apppool 添加一个新的应用程序池。 appcmd add apppool /name: "MyAppPool"
appcmd delete apppool 删除指定的应用程序池。 appcmd delete apppool /apppool.name: "MyAppPool"
appcmd start apppool 启动指定的应用程序池。 appcmd start apppool /apppool.name: "MyAppPool"
appcmd stop apppool 停止指定的应用程序池。 appcmd stop apppool /apppool.name: "MyAppPool"
appcmd set apppool 修改应用程序池的设置。例如,可以配置应用程序池的回收策略、最大工作进程等。 appcmd set apppool /apppool.name: "MyAppPool" /managedRuntimeVersion:v4.0
虚拟目录(VDir)管理
命令 描述 示例
appcmd add vdir 为指定站点添加虚拟目录。 appcmd add vdir /vdir.name: "MyVDir" /site.name: "MySite" /physicalPath: "C:\MySite\VDir"
appcmd delete vdir 删除指定站点的虚拟目录。 appcmd delete vdir /vdir.name: "MyVDir" /site.name: "MySite"
appcmd list vdir 列出指定站点的虚拟目录。 appcmd list vdir
配置(Config)管理
命令 描述 示例
appcmd set config 设置或修改 IIS 配置文件中的设置。 appcmd set config /section:system.webServer/security/authentication/anonymousAuthentication.enabled:true
appcmd set config -section:<section> 设置指定的配置节。例如设置应用程序池、认证或 URL 重写等配置。 appcmd set config -section:system.webServer/defaultDocument /e
其他常用命令
命令 功能 示例
appcmd /? 列出所有命令的全局帮助信息。 appcmd /?
appcmd site /?
appcmd set apppool /?
appcmd backup 创建和恢复备份。
  • 添加一个新的站点。需要指定站点名称、绑定信息(例如端口和协议)以及物理路径。
    1
    appcmd add site /name:MySite /bindings:http/*:8080: /physicalPath:C:\MySite
  • 删除指定名称的站点。
    1
    appcmd delete site /site.name:MySite
  • 启动指定的站点
    1
    appcmd set site /site.name:MySite /state:started
  • 停止指定的应用程序池。
    1
    appcmd set apppool /apppool.name:MyAppPool /state:stopped

web.config 配置文件

  • 网站结构如下图:
    1
    2
    3
    4
    E:\
    └── myapp
    ├── index1.html
    └── web.config
  • web.config 配置 覆盖applicationhost.config的部分可覆盖配置
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <system.webServer>
            <defaultDocument enabled="false">
                <files>
                    <add value="index1.html" />
                </files>
            </defaultDocument>
            <directoryBrowse enabled="true" />
            <urlCompression doStaticCompression="false" doDynamicCompression="false" />
            <httpProtocol>
                <customHeaders>
                    <remove name="X-Powered-By"/>
                    <add name="Powered-By" value="iisexpress_config" />
                </customHeaders>
            </httpProtocol>
        </system.webServer>
    </configuration>
  • 运行网站
    1
    iisexpress /path:"E:\myapp" /port:8080
    目前使用iisexpress运行多app,多vdir网站,需要在applicationhost.config 配置完成。以下是applicationhost.config sites段。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
      <sites>
    <site name="WebSite1" id="1" serverAutoStart="true">
    <application path="/">
    <virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%\WebSite1" />
    </application>
    <application path="/blogs">
    <virtualDirectory path="/" physicalPath="E:\myblogs\public" />
    </application>
    <bindings>
    <binding protocol="http" bindingInformation=":8080:localhost" />
    </bindings>
    </site>
    <siteDefaults>
    <!-- To enable logging, please change the below attribute "enabled" to "true" -->
    <logFile logFormat="W3C" directory="%AppData%\Microsoft\IISExpressLogs" enabled="false"/>
    <traceFailedRequestsLogging directory="%AppData%\Microsoft" enabled="false" maxLogFileSizeKB="1024" />
    </siteDefaults>
    <applicationDefaults applicationPool="Clr4IntegratedAppPool" />
    <virtualDirectoryDefaults allowSubDirConfig="true" />
    </sites>
    使用applicationhost.config 配置 直接启动网站
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    PS E:\myapp> iisexpress
    Starting IIS Express ...
    Successfully registered URL "http://localhost:8080/" for site "WebSite1" application "/"
    Successfully registered URL "http://localhost:8080/blogs/" for site "WebSite1" application "/blogs"
    Registration completed for site "WebSite1"
    IIS Express is running.
    Enter 'Q' to stop IIS Express
    请求已开始:“GET”http://localhost:8080/
    Response sent: http://localhost:8080/iisstart.htm with HTTP status 200.0
    请求已开始:“GET”http://localhost:8080/blogs
    Response sent: http://localhost:8080/blogs with HTTP status 301.0
由 Hexo 驱动 & 主题 Keep