配置 IIS Express 以实现对 VS2010 项目的外部访问

Posted

技术标签:

【中文标题】配置 IIS Express 以实现对 VS2010 项目的外部访问【英文标题】:Configure IIS Express for external access to VS2010 project 【发布时间】:2011-07-22 23:18:36 【问题描述】:

我正在 VS2010 中开发一个项目,并且能够通过 IIS Express 在本地查看我的站点。我想通过网络启用外部访问。

我的所有研究都将我发送到此博客条目:http://blogs.iis.net/vaidyg/archive/2010/07/29/serving-external-traffic-with-webmatrix-beta.aspx,这很有帮助,但似乎没有显示如何为在 Visual Studio 中启动的项目配置绑定(我在屏幕截图中找不到屏幕,我已在 applicationhost.config 中编辑了绑定信息,但当我从 Visual Studio 运行该站点时似乎没有反映)。

【问题讨论】:

请阅读 Scott Hanselman 博文hanselman.com/blog/… IIS Express enable external request的可能重复 【参考方案1】:

1 编辑 applicationhost.config 文件(位于文档中的 IISExpress 文件夹中)后,您的站点绑定应如下所示:

<bindings>
  <binding protocol="http" bindingInformation="*:8080:*" />
</bindings>

绑定由三部分组成。首先是一个 IP 地址或列表,或者在本例中是一个通配符。其次是端口号,第三是主机名、列表或通配符(用于通过Host 标头过滤)。出于开发目的,通配符在这里最合适,因为您可能会使用唯一的端口。

2 因为您使用的是非本地主机绑定,所以需要额外的权限。您可以以管理员身份运行 VS,或者最好使用add URL ACLs 来授予所需的权限。在下面的示例中,每个人都获得了权限,但您可以使用自己的用户名。

注意:urlacl 必须与绑定完全匹配。因此,urlacl for http://*:8080 将允许绑定 *:8080:*,但不允许绑定 *:8080:localhost,即使后者是前者的子集。 这意味着如果不使用通配符,而是在 applicationhost.config 中列出主机标头,则必须为每个标头添加匹配的 urlacl

为外部流量配置 HTTP.sys 的步骤类似于设置站点以使用保留端口。在 Windows 7 或 Windows Vista 上,从提升的命令提示符运行以下命令:

netsh http add urlacl url=http://*:8080/ user=DOMAIN\username

在 Windows XP 上,从提升的命令提示符运行以下命令:

httpcfg set urlacl /u http://*:8080/ /a D:(A;;GX;;;WD)

注意2 如果以管理员身份运行VS或添加ACL条目都不能解决您的问题,请从命令行运行IIS Express并检查是否有任何绑定注册失败消息。要从命令行开始,请给出以下命令:

iisexpress.exe /site:"your-site-name"

3 最后,您将需要适当的防火墙条目。为此,最简单的方法是使用“具有高级安全性的 Windows 防火墙”控制台。

在“入站规则”下选择“新规则...”。

规则类型为“自定义”。 程序是服务->自定义...->仅适用于服务。 (虽然 IIS Express 不是服务,但它使用的 HTTP 多路复用器是)。 协议是 TCP 特定端口:列出所有 IIS Express 绑定的所有端口。您可以随时返回此规则并添加端口。 (如果这变得令人厌烦,您可以添加一个范围,例如 40000-65534,它涵盖了 Visual Studio 使用的整个范围,但请注意这样不太安全)。 操作是“允许连接” 配置文件将是以下之一。如有疑问,请选择“域 + 私有”。 “域”,如果您的桌面是公司桌面并且只能在本地域上运行 “Domain + Private”如果您是非公司环境中的私有开发机器,或者是在家工作时也需要工作的公司笔记本电脑。 “域、私有和公共”,如果您需要在非私有网络上进行演示。 名称应类似于“IIS Express Dev Server”

【讨论】:

@user578913 所以我终于找到了正确的 applicationhost.config 文件,方法是打开正在运行的 IIS Express 任务栏并单击它,然后单击配置文件的链接。我在第二行将端口设置为 1063,因为这是第一行设置的。运行你的命令行,一切看起来都很好。当我从网络上的另一台机器转到machine-name 或machine-name:1063 时,我仍然一无所获。 好的,因为 Visual Studio 分配了一个端口(8080 除外),Windows 防火墙阻止了它。在关闭 Windows 防火墙(可以说我可以只打开端口,但我在一个安全的网络上)并使用我的机器的 IP 而不是机器名称后,它就可以工作了。谢谢。我会投票,但还没有代表 =( 是的,如果需要打开 Windows 防火墙,那么您明确添加 TCP 端口 8080(或您使用的端口)。在 Windows 7 中,最初我尝试将端口分配给“IIS Express 工作进程”。但它没有用。我必须使用“新规则”选项并允许端口 8080。选择配置文件(域、私有、公共)也很重要。 自我注意:如果您拒绝访问,以管理员身份运行 Visual Studio 从 VS2015 开始,文件位置为 C:\&lt;Path\To\Solution&gt;\.vs\config\applicationhost.config。 (谢谢,@Talon)【参考方案2】:

我也在这个问题上花了几个小时,试图从我的 android Xoom 浏览到我的 win7 开发机器,这样我就可以测试我创建的一个新的 asp.net 网络应用程序。我所做的只是将 IISExpress 的 applicationhost.config 从使用 PC 主机名更改为 PC 的当前 IP 地址,用于我的新站点。

<binding protocol="http" bindingInformation="*:80:dev-Lee" />

<binding protocol="http" bindingInformation="*:80:192.168.1.102" /> 

一旦我这样做并重新启动 IISExpress...我就能够浏览到我的 dev-Lee 机器并从我的 Xoom 中查看我的应用程序!

【讨论】:

所有这些解决方案我得到的只是错误 400 - 错误请求。有什么建议吗? @Krumelur,确保您编辑了正确的 applicationhost.config 文件。我的文档文件夹中的那个。【参考方案3】:

我们可以通过编辑IIS Express的applicationhost.config来添加多个绑定地址

<bindings>
   <binding protocol="http" bindingInformation="*:62217:localhost" />
   <binding protocol="http" bindingInformation="*:62217:192.168.0.5" />
   <binding protocol="http" bindingInformation="*:62218:192.168.0.5" />
</bindings>

现在我们可以使用IP地址从局域网访问网站了。

Accessing local sites from Lan using IIS Express

【讨论】:

【参考方案4】:

Visual Studio 2013 SP1 及更高版本 (2015) 包括设置“将服务器设置应用于所有用户(存储在项目文件中)”。这是默认启用的。启用后,Visual Studio 会使用命令行参数启动 IIS Express,使其使用不同的配置文件。 “applicationhost.config”文件的位置在“.vs\config”的项目目录下。

【讨论】:

是的,这就是我的问题 - 我试图编辑一个不正确的文件。碰巧的是,您可以通过单击托盘图标、列出所有应用程序并选择您的 IIS Express 应用程序来查看 IIS Express 应用程序的配置位置。配置文件的路径将写在下面。我在 .vs\config 是的,我也一样。非常感谢。【参考方案5】:

我们制作了一个名为 Conveyor 的免费 VS(2012、2013、2015)扩展程序,它允许这样做 - 您可以通过 VS 中的工具 -> 扩展程序... 菜单或画廊网站 https://visualstudiogallery.msdn.microsoft.com/a429dbb7-a982-4541-b401-934375c02c0f?SRC=Home 找到它

【讨论】:

这太棒了,而且很容易设置。感谢您的工作!【参考方案6】:

如果您使用的是 Visual Studio,请按照以下步骤通过 IP 地址访问 IIS-Express:

    在 Windows 命令行中获取您的主机 IP 地址:ipconfig 转到 $(SolutionDir).vs\config\applicationHost.config 查找<site name="WebApplication3" id="2"> <application path="/" applicationPool="Clr4IntegratedAppPool"> <virtualDirectory path="/" physicalPath="C:\Users\user.name\Source\Repos\protoype-one\WebApplication3" /> </application> <bindings> <binding protocol="http" bindingInformation="*:62549:localhost" /> </bindings> </site> 添加: &lt;binding protocol="http" bindingInformation="*:62549:192.168.178.108"/&gt; 使用您的 IP 地址 以管理员权限运行 Visual Studio,一切正常 如果您尝试从远程连接,可能会寻找一些防火墙问题

线索是,Visual Studio 有它自己的 applicationHost.config 文件!

【讨论】:

【参考方案7】:

我在 Visual Studio 2012 中让它工作时遇到了很多麻烦,我从 404 错误变为 503 错误。最终对我有用的是清除 IIS Express 配置中的所有相关配置...

"\Program Files (x86)\IIS Express\appcmd.exe" list site
"\Program Files (x86)\IIS Express\appcmd.exe" delete site xxx
"\Program Files (x86)\IIS Express\appcmd.exe" delete site yyy

然后,我在 VS 中的 Web 项目的属性页面中创建了一个新的虚拟目录,但在创建虚拟目录之前,我将主机名更改为 http://myhost:80/,然后点击创建虚拟目录按钮。 以前我收到错误消息说主机名必须是“localhost”,但这次不是。之后,它就奏效了。

简而言之,先清除现有配置,然后重新开始。

【讨论】:

【参考方案8】:

如果你的外部域是“name.mydyndns.com”,那么你需要写:

<binding protocol="http" bindingInformation="*:name.mydyndns.com" />

这适用于 Windows 2003 Server 和 IIS 7.5 Express。

【讨论】:

【参考方案9】:

在 IIS 上的应用程序池中将“启用 32 位应用程序”设置为“true”。

【讨论】:

不确定这是否真的解决了这个问题。你的意思是在另一个问题上发布这个?

以上是关于配置 IIS Express 以实现对 VS2010 项目的外部访问的主要内容,如果未能解决你的问题,请参考以下文章

关于vs 打开网站时报错 配置iis express失败 无法访问IIS元数据库...

错误:“项目不知道如何运行配置文件 IIS Express”(VS 2019、16.11.7)

VS2017 IIS Express 无法启动 解决办法

VS2015 无法启动IIS Express Web服务器(已解决)

IIS Express Windows 身份验证

服务器——IIS——IIS Express——IIS跟IIS Express之间的区别和关系