65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 IIS Express 使 Web 开发更轻松

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.82/5 (29投票s)

2012年6月4日

CPOL

23分钟阅读

viewsIcon

199310

抛弃卡西尼 (Cassini) 的沉重负担,用轻量、强大却简单的 IIS Express 如风般运行。了解如何轻松测试 SSL、向同事演示你的网站等等,几乎不费吹灰之力。

引言

尽管 Cassini 是 Visual Studio 中的默认开发 Web 服务器,但 Microsoft 提供了一个独立的选项,它也可以与 Visual Studio 集成。IIS Express 几乎与完整的 IIS 完全相同,只不过它是自包含的,它不是一项服务,并且大多数任务不需要管理员权限。我们将逐步介绍如何获取它、如何配置它以及如何充分利用它,而无需花费大量时间。

背景

最初有 Cassini,它很糟糕。Cassini 是随 Visual Studio 一起提供的 Web 服务器。它也被称为“Visual Studio 开发 Web 服务器”或“ASP.NET 开发服务器”。每当你想在计算机上测试 Web 应用程序时,你都会启动调试器,然后系统托盘中会弹出以下图标和消息: 



 
这表明一个小型 Web 服务器已在随机端口上启动,并且正在托管你的应用程序。这样,当浏览器启动时,你就可以看到你的网站正在运行。好的,这很酷,但有很多限制。首先,它只在你的本地计算机上工作。你无法打开防火墙让你的朋友测试你的网站。它也不支持 SSL 或其他 Cassini 实例。说到这一点,如果你不小心,你最终会在你的计算机上同时运行多个 Cassini 实例。基本上,这是一个好主意,但实现却很缺乏。进入 IIS Express。

获取 IIS Express

要获取 IIS Express,你可以安装 WebMatrix,也可以安装 IIS Express 的独立版本。直接下载链接在此:http://www.microsoft.com/en-us/download/details.aspx?id=1038  这提出了一个有趣的观点:IIS Express 不与 Visual Studio 绑定。这是一个很棒的功能,因为这意味着我们可以将其用于其他网站开发项目。事实上,IIS Express 支持 PHP 以及标准的 HTML 文件。仅此一点就使这个 Web 服务器领先 Cassini 一步,而我们才刚刚开始。  

配置 Visual Studio

安装 IIS Express 后,你需要更新 Visual Studio 以使用该 Web 服务器。这可以针对每个项目进行,也可以是所有新项目的默认设置。要将一个项目更改为使用 IIS Express,只需右键单击该项目并选择“使用 IIS Express...”,如下所示

 

 

系统会询问你是否要配置项目以使用 IIS Express。此步骤将更改你的项目属性,并更新 IIS Express 用于了解哪些站点位于何处的特定于用户的配置文件。提示应如下所示

 

 
当你点击“是”时,更改将生效,并且会告知你网站的新 URL,如下所示

 


现在,你已完成配置 IIS Express 以与你的应用程序协同工作所需的所有步骤。很简单,是吧?在我们探讨此更改为何如此重要之前,让我们告诉 Visual Studio 将 IIS Express 用作我们的默认开发 Web 服务器。事实证明,这也可以快速完成。在 Visual Studio 中,选择“工具”菜单下的“选项”。在“选项”中,有一个“项目和解决方案”部分。在该部分下是“Web 项目”子部分。当你选择它时,你将看到大量的选项……好的,实际上只有一个复选框。勾选“为新的基于文件的网站和项目使用 IIS Express”复选框。它看起来像这样

 

 
现在你已经完成了将 IIS Express 设置为 Visual Studio 默认开发 Web 服务器的艰巨任务。这包括 ASP.NET 站点、WCF 站点和其他 Web 项目。

IIS Express 的优势

对于一个如此简单的应用程序,使用 IIS Express 会带来很多真正的好处。以下是我认为重要的好处列表(每个链接到下面解释如何配置和它做什么的部分)

以下每个项目都有专门的部分,向您展示它们如何工作。但是,您只需要使用您的项目所需的功能。您已经完成了大多数项目所需的所有配置。将以下信息视为“它还能做什么”,而不是“我还​​需要做什么”。

SSL 配置

过去,为了测试 SSL,你需要在你的机器上创建一个自签名证书并将其托管在完整的 Web 服务器上。步骤繁多且有些复杂,尤其是如果你对正在做的事情不是很自信的话。这里有一篇关于如何在 IIS 7 中创建自签名证书的好文章(正如文章指出的,这比以前的版本容易得多):创建自签名证书。将其与我们需要做的步骤进行比较:选择你的项目并查看属性。在属性中,将 SSL Enabled 设置为 True。我想我们都欠 IIS Express 的开发者一杯咖啡或其他什么,感谢他们提供了这个小技巧。没有比这更容易的了。

需要明确的是,你不需要修改项目属性,而是在选择项目时更改属性中的设置。不管出于什么原因,微软决定将项目的属性表命名为“Properties”,而“Properties”窗口已经存在。这里有一个截图可以让你更清楚地了解

 

还要注意,此属性表上还有其他选项可以玩。例如,你可以禁用匿名身份验证或启用 Windows 身份验证。对于几个简单的属性来说,这还不错。这里需要注意的一件重要事情是,证书不会受到信任。当你浏览到该站点时,仍然会收到“此证书不受信任”的提示。这没关系。你不是在测试证书本身,而是在测试该站点在 SSL 上的响应方式。

这里有一个快速提示:IIS Express 配置为使用 44300 到 44399 端口进行 SSL。如果你将 SSL 端口更改到此范围之外,你将收到错误。我见过很多“解决方案”用于更改为默认的 443 端口,但大多数都不奏效。我发现的一个有效方法是遵循 Scott Hanselman 在此处的指示:在 443 端口上使用 SSL

虚拟目录和自定义路径

有时,你需要测试一个站点将如何与另一个站点交互。也许你正在同时开发两个站点,其中一个使用相对 URL 引用另一个站点。同样,IIS Express 又来帮忙了。要修改应用程序的默认路径,请打开项目下的“属性”表。在左侧的选项卡中,选择“Web”。在“服务器”部分下,你将看到“项目 URL”。你可以通过在其末尾添加路径然后选择“创建虚拟目录”来修改此项。对于协同工作的站点,你还可以更改端口以匹配另一个项目的端口,这样两者将使用相同的根路径。例如,我将修改我的应用程序,使其在已在端口 21000 上运行的应用程序下的一个文件夹中运行。

首先,我将属性表打开到正确的位置。我当前的配置如下所示

 

我修改了项目 URL,使其指向新端口和一个名为 Demo 的虚拟目录。我点击了“创建虚拟目录”按钮,并得到了这条消息

 

 

现在,当我启动此网站时,它将在与我其他网站相同的端口上运行。它之所以能避免冲突,是因为它使用了虚拟目录。现在,我的第一个网站可以使用 /Demo 的相对路径访问此网站。

不使用调试器运行你的站点

IIS Express 不是 Visual Studio 的一部分;它只是与 Visual Studio 友好协作。这意味着它可以在不运行调试器的情况下为你的网站提供服务。事实上,认为启动 IIS Express 的方式是启动调试器是一个误解。调试器确实可以启动它,但这只是一个便利。IIS Express 可以独立于 Visual Studio 运行你的网站。这样做的好处是你可以对项目进行更改,点击保存按钮,然后刷新浏览器即可立即看到结果。如果你更改了后端代码,则在刷新页面之前需要进行项目构建。无论哪种方式,这都是一个很好的选择。现在你可以全天运行你的网站,同时对其进行调整。正如你将看到的,此功能还有其他好处。

观察你的网站运行

就像我之前提到的,通过调试器启动 IIS Express 仅仅是一种便利。事实上,这可能不是启动 IIS Express 的最佳方式。启动 Web 服务器的更好方式是通过命令行。这样做会给你提供一些你原本不会有的功能。其中一个最好的好处是,你将能够看到每个请求以及带有 HTTP 状态码的请求结果。这在调试网站时特别有用。识别你是发送 GET 而不是 POST 很容易,这将为你节省大量时间。 

要从命令行运行 IIS Express,请打开命令提示符(在“开始”菜单的搜索框中键入 cmd 并按 Enter),然后键入以下内容: 

cd %programfiles%\IIS Express

适用于 32 位操作系统或

 
cd c:\Program Files (x86)\IIS Express

如果你使用的是 64 位机器。这会将你置于正确的目录中。现在你可以使用以下命令运行 IIS Express

 
iisexpress /site:[site_name]


站点名称通常是你的项目名称。但是,如果你对站点进行了更改,或者为项目创建了几个不同的配置,这可能不起作用。确定站点名称的一种简单方法是运行调试器,然后检查系统托盘图标。它会告诉你正在运行的站点的名称。一旦站点运行,你的命令窗口应该如下所示

 

 

IIS Express 现在正在运行,并等待您的站点上的活动。在已经显示的文本中,您可以看到启用了哪些协议以及在哪些端口上。在这种情况下,我实际上在 HTTP 和 HTTPS 上运行相同的站点。让我们浏览到我们 HTTPS 站点的根目录,看看命令窗口向我们显示了什么

 

 

当请求完成后,我看到了上面显示的四行。首先,我看到我向我的 HTTPS 站点发出了一个 GET 请求。该请求以 HTTP 状态 200(成功)结束。然后发出了第二个 GET 请求,用于 favicon.ico 文件。我的站点上没有这个文件,因此返回了 HTTP 状态 404。在我的站点上,一切看起来都正常。我不会知道我实际上进行了两次往返,并且其中一个返回了 404。此功能在一个小型演示项目中已经很有帮助。想象一下当你在一个完整的 MVC 站点中传递 JSON 请求以及 GET 和 POST 请求时它能做什么。它可能不是 Fiddler,但仍然非常有用。

运行多个站点

为什么最佳实践鼓励我们拆分单体应用程序,而我们的工具却期望我们一次只运行一个网站?在现实世界中,我经常发现自己开发的应用程序与其他网站和服务交互。幸运的是,IIS Express 再次来拯救我们。如果你在 Visual Studio 中打开了多个项目,在调试器中运行每个项目一次将启动 IIS Express 中的该应用程序。在你启动并停止最后一个应用程序后,所有站点仍将在 IIS Express 中运行。现在它们都可以交互了。

在我看来,更好的方法是从命令提示符启动站点。我们已经知道如何为单个站点执行此操作,但对于多个站点,我们有几个选项。一种方法是启动所有使用相同应用程序池的站点。为此,请使用以下命令行

 
IISExpress /AppPool:Clr4IntegratedAppPool

这会启动使用指定应用程序池的站点(在我的机器上,这是默认应用程序池)。除非你更改了默认配置(我们将在下面看到如何操作),否则它将启动你在 IIS Express 中配置过的所有站点。这可能不是你所期望的(在我的测试机器上,我一次加载了三十多个站点)。在我看来,从命令提示符启动多个站点的更好方法是启动多个命令提示符。这听起来可能很混乱,但请考虑一下:每个窗口将只显示它正在发送和接收的消息。这将更容易显示你是否存在通信问题。这种方法的好处是 IIS Express 只会打开一个系统托盘图标。你可以在一个地方看到所有站点。但是,它为每个命令窗口打开一个 IIS Express Web 服务器实例。通过这种方式,它确实像两个不同的 Web 服务器相互通信。

当您同时开发网站和 Web 服务时,此功能的好处真正体现出来。您可以在 IIS Express 中启动 Web 服务,然后像在实时环境中一样与其交互。对于相互引用的站点(如我们上面看到的,位于另一个站点下的虚拟目录中的站点)也是如此。

将设置传输到完整的 IIS

让我们面对现实吧——你不会使用 IIS Express 发布你的网站的正式版本。总有一天,这只小鸟需要离开巢穴。那时,你可能希望将开发环境中的设置复制到你的生产环境,因为你已经将开发环境设置为模仿它在现实世界中如何工作。好消息是 IIS Express 考虑到了这一点,并使其变得简单。要进行此设置,请进入你的 Web 项目下的“属性”表,然后选择“包/发布 Web”选项卡。在“要部署的项目(仅适用于 Web 部署)”部分下,勾选“包括 IIS Express 中配置的 IIS 设置”复选框,如下所示

 

 
完成。请记住,这并非完全魔法,所以如果你不使用 Web Deploy,它不会自动工作。

展示你的作品

你知道你想。也许你的老板想看看你的进度,或者你想给内部客户快速演示你的新网站。无论出于什么原因,总有一天你会希望其他人看到你的作品。现在,你无需将半生不熟的代码部署到某个服务器,只需共享你的作品即可。一旦你打开防火墙并调整 applicationhost.config 文件,IIS Express 将接受来自你计算机外部的调用。  

要修改您的配置文件,请浏览到您的“文档”文件夹。其中将有一个名为 IIS Express 的目录。其中将有一个名为 config 的文件夹。完整路径应为 C:\Users\{用户名}\Documents\IISExpress\config。此文件夹中是您的 applicationhost.config 文件。这是 IIS Express 存储所有配置信息的地方。请记住,IIS Express 是用户特定的,这就是为什么设置在此处。打开配置文件。如果您熟悉 IIS 配置文件,这看起来会非常熟悉。如果您不熟悉,请不要担心,它并没有那么糟糕。向下滚动到名为“Sites”的部分。该部分内部将有每个站点的子部分。找到您的站点并查找绑定标签。通过删除“localhost”来修改每个绑定。不要用 IP 地址替换它,除非您想将连接限制为仅一个 IP。这是我的第一个连接的样子(绑定行已突出显示)

 

 
现在是我修改后的同一行

 

 

保存配置文件并以管理员身份启动 IIS Express(IIS Express 无法绑定到 localhost 以外的任何东西,除非它以管理员权限运行)。无需进行进一步配置。只需将您的用户指向您的计算机和端口号,您的计算机就会成为一个临时 Web 服务器。这再次说明了从命令行运行 IIS Express 的巨大好处。您将能够观察到调用的传入,这使得诊断更加出色。

按用户配置文件

正如我之前多次指出,IIS Express 使用按用户配置文件运行。每个用户都可以在自己的配置中调整其设置的布局方式。事实上,他们可以添加自己的设置,这些设置会影响您的项目在他们的机器上如何运行。您的项目也带有一些设置。这意味着当您将项目移动或复制到另一台机器时,applicationhost.config 文件需要更新以反映存储在您项目中的设置。幸运的是,Visual Studio 识别了这一点,并会像这样提示您

 

 

如果你选择“是”,Visual Studio 会负责将适当的设置添加到配置文件中。小菜一碟,对吧?

高级:命令行配置

我们已经提到了一些命令行优点,包括启动 IIS Express 以查看流量以及加载特定应用程序池的所有站点。然而,还有其他以命令行选项形式存在的隐藏宝藏,它们可能非常有用,包括

  • – 如果您不为应用程序指定任何参数而直接运行它,它将启动列表中的第一个网站。
  • /config:[配置的完整路径] – 此命令允许您将 IIS Express 指向一个新的配置文件。您可以尝试他人的配置,或者为不同的项目使用不同的配置文件。除非您想启动配置中的第一个站点(这是默认设置),否则您仍然需要指定要启动的内容。
  • /siteid:[id] – 就像通过站点名称启动站点一样,您也可以通过其 ID 启动它,该 ID 在配置文件中指定。通常,这些 ID 从 1 开始按顺序排列。
  • /systray:[true/false] – 这标识 IIS Express 的图标是否放置在系统托盘中。默认情况下,它将被放置在那里。
  • /trace:[值] – 此处的选项有 none/n、info/i、warning/w 和 error/e。您可以指定短值或长值。默认值为 none。Trace 将为您提供有关应用程序本身及其运行方式的更多信息。您将获得大量关于服务器如何与网站交互的信息,而不仅仅是调用本身。当 IIS Express 似乎出现问题时,这最有用。

我故意省略了上面列表中的几个开关。原因是因为它们的操作方式与其余的不同。有时你想运行一个站点而不添加配置条目。这些开关就是为了这种特殊情况而设。它们不能与大多数其他命令一起使用,这是它们单独的另一个原因。以下是额外的选项

  • /path:[完整应用路径] – 用于指向您要运行的网站的根路径。
  • /port:[数字] – 您可以指定您的指定应用程序将运行的端口。这必须与 /path 选项一起使用。
  • /clr:[版本] – 您可以指定应用程序所使用的 CLR 版本。同样,您需要将此与 /path 选项一起使用。

这里的命令很简单,但是有很多不错的功能偶尔会派上用场。一如既往,您可以使用 /? 命令来获取这些命令及其基本解释。

高级:配置灵活性

这里我们深入了解细节。我们将深入研究配置文件并手动更改一些设置。这将使我们更好地了解 IIS Express 的工作原理以及我们如何更改它以适应我们的需求。导航到您的配置文件(默认情况下,它位于 C:\Users\{用户名}\Documents\IISExpress\config)。请记住,您可以加载其他配置文件,因此您可能希望在副本上工作。如果您想就地修改现有文件,至少先进行备份。

我将介绍一些您可以操作的部分。以任何严肃的方式修改配置文件都需要一整篇文章(这也不是一件坏事)。我将重点关注几个可能对您最有益的关键领域。

审查您的网站 

有一个名为“sites”的部分,其中包含一组站点。每个站点都对应于 IIS Express 中保存的一个站点(这很合理,对吧?)。当你从命令提示符运行 IIS Express 时,你可以选择通过站点名称或 ID 号启动网站。此信息列在 site 标签中。

在 site 标签下,您会找到 application 和 bindings 部分。application 部分将 URL 路径映射到物理路径。bindings 部分告诉 IIS Express 将哪些协议绑定到此网站以及使用哪些端口。在这里我们更改了绑定信息,通过取消 localhost 指定,允许外部用户加载我们的站点。这是我默认站点的此部分的样子(在我修改它之前)

 

 

更改您的目录

有时你可能需要更改站点指向的位置。为此,只需编辑 virtualDirectory 元素的 physicalPath 属性以反映新位置即可。例如,我的示例站点 (Website1) 指向 C:\Program Files\IIS Express\WebSite1。我将把它更改为指向包含我的测试站点的目录,如下所示

 

 
现在,当我启动我的网站时,它会从这个新位置拉取内容。只需确保刷新你的浏览器以清除任何缓存。

更改您的绑定 

对我来说,这是一个更常见的任务,主要是因为它是我们允许外部人员使用我们站点的方式。但是,您也可以更改端口号。当您有另一个应用程序想要使用您已经使用的端口时(很少发生,但确实会发生),这会很有用。IIS Express 擅长内部处理端口问题,但有时您的应用程序外部存在干扰问题。在我的示例中,我将端口更改为 12345,这样很容易记住,并且我将取消 localhost 指定,以便我的同事可以访问它: 

 

现在我可以告诉我的同事通过 http://computername:12345/ 访问我的站点

添加绑定

这是一个向你的站点添加 SSL 的简单方法。只需添加一个 https 绑定,并将 bindingInformation 指向 44300 到 44399 之间的一个端口号即可。在我的示例中,我添加了一个 HTTPS 站点,它监听端口 44332

 

 

别忘了,你将需要以管理员身份启动命令提示符才能启动此站点,因为它需要管理员权限才能将端口绑定到 SSL。

创建一个新网站

如果你一直跟着做,这一步应该很容易。我们将把所有内容整合到一个新部分。我真正要添加的一点是在 application 元素中指定 applicationPool,只是为了表明我可以在你需要更改使用的 AppPool 时这样做。这可以用于加载别人的程序集,甚至无需在 Visual Studio 中打开他们的应用程序。这是我的示例条目

 

 
请注意,我将站点 ID 更改为 17。那是因为 17 是我配置文件中目前下一个空闲的 ID 号。如果我在配置中放入重复的 ID 号,即使我只尝试加载一个站点,它也会抛出错误。

修改默认值

在最后一个指定的站点下方,仍然在 sites 元素内部,是一组默认值。在这里你可以更改日志文件的写入位置,甚至可以更改默认的 applicationPool。它看起来像这样

 

 

我不会在这里更改任何内容,但在某些罕见情况下,你可能会在这里进行更改。

网络服务器变更 

您可以以修改 IIS 的方式修改 IIS Express 的工作方式。在大多数情况下,您不应进入这些部分。但是,有一些地方可能偶尔需要更改。这些包括

默认文档

这是将用于查找第一个匹配文件作为主页的部分: 

 

 

自定义错误页面

在这里您可以更改每种 HTTP 错误的错误页面

 

展望未来

本文主要关注 IIS Express 7.5。在 Visual Studio 的新版本中,还将有 IIS Express 8.0。虽然 Cassini 仍然可用,但 IIS Express 将成为 Visual Studio 2012 的默认开发 Web 服务器。我将更新本文,以包含一个关于 IIS Express 8.0 中更改及其工作方式的部分。然而,本文的主要焦点仍将是如何在 Visual Studio 2010 中使用 IIS Express 7.5,因为那是本文发布时主要的开发系统。

结论

IIS Express 是一款令人惊叹的产品,它完全超越了 Cassini。我们已经看到了它使用和配置起来是多么容易。我们还研究了如何通过从命令行运行 Web 服务器来获取更多关于其运行情况的信息。最后,我们逐步介绍了如何配置系统以充分利用 IIS Express。我希望您觉得这篇文章有用。如果您能提供建设性的评论,告诉我如何让这篇文章变得更好,我将不胜感激。

历史

  • 2012年6月4日 - 初版
© . All rights reserved.