我正在 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 运行该站点时似乎没有反映)。
1 编辑 applicationhost.config 文件(位于文档中的 IISExpress 文件夹中)后,您的站点绑定应如下所示:
<bindings>
<binding protocol="http" bindingInformation="*:8080:*" />
</bindings>
绑定由三部分组成。首先是一个 IP 地址或列表,或者在本例中是一个通配符。其次是端口号,第三是主机名、列表或通配符(用于按 Host
标头过滤)。出于开发目的,通配符在这里最合适,因为您可能会使用唯一的端口。
2 因为您使用的是非本地主机绑定,所以需要额外的权限。您可以以管理员身份运行 VS,或者最好add URL ACLs 授予所需的权限。在下面的示例中,每个人都获得了权限,但您可以使用自己的用户名。
注意: urlacl
必须与绑定完全匹配。因此,http://*:8080
的 urlacl
将允许绑定 *: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 设置 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”
我在这个问题上也花了几个小时,试图从我的 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 中查看我的应用程序!
我们可以通过编辑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
Visual Studio 2013 SP1 及更高版本 (2015) 包括设置“将服务器设置应用于所有用户(存储在项目文件中)”。这是默认启用的。启用后,Visual Studio 会使用命令行参数启动 IIS Express,使其使用不同的配置文件。 “applicationhost.config”文件的位置在“.vs\config”的项目目录下。
我们制作了一个名为 Conveyor 的免费 VS(2012、2013、2015)扩展程序,它允许这样做 - 您可以通过 VS 中的工具 -> 扩展程序... 菜单或画廊网站 https://visualstudiogallery.msdn.microsoft.com/a429dbb7-a982-4541-b401-934375c02c0f?SRC=Home 找到它
如果您使用的是 Visual Studio,请按照以下步骤通过 IP 地址访问 IIS-Express:
获取您的主机 IP 地址: ipconfig 在 Windows 命令行 GoTo $(SolutionDir).vs\config\applicationHost.config Find
线索是,Visual Studio 有它自己的 applicationHost.config 文件!
我在 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”,但这次不是。在那之后,它奏效了。
简而言之,首先清除现有配置并重新开始。
如果您的外部域是“name.mydyndns.com”,那么您需要编写:
<binding protocol="http" bindingInformation="*:name.mydyndns.com" />
这适用于 Windows 2003 Server 和 IIS 7.5 Express。
https://i.stack.imgur.com/gmEmv.png
在 IIS 上的应用程序池中,将“启用 32 位应用程序”设置为“true”。
C:\<Path\To\Solution>\.vs\config\applicationhost.config
。 (谢谢,@Talon)