将IIS Express绑定到一个IP地址

129

是否可以使用IIS Express在网络上托管网页?默认情况下,它只能在本地主机上运行,但我正在尝试将其绑定到一个IP地址。


1
你可以使用我们的扩展程序(Conveyor)https://marketplace.visualstudio.com/items?itemName=vs-publisher-1448185.ConveyorbyKeyoti,无需进行配置更改即可完成。 - Jim W says reinstate Monica
1
@JimW,我认为您的回答是最好的,快速而无缝。谢谢!您应该把您的答案留下来。 - Vman
5个回答

126

我认为你是可以的。

要实现这个目标,你需要手动编辑applicationhost.config文件(编辑bindingInformation '<ip-address>:<port>:<host-name>')。

启动iisexpress需要管理员权限。


3
就是这样了。复制了applicationhost.config并修改绑定为: <bindings> <binding protocol="http" bindingInformation=":8080:<ip地址>" /> </bindings> - jdiaz
37
谢谢您的信息,我从失败的经验中了解到,要让IIS对外部流量开放(不是本地主机),您需要以管理员身份运行它(我在我的局域网上测试了一款平板电脑)。如果您正在使用Visual Studio,则需要以管理员身份运行它,以便访问扩展到其子进程。这将使IISExpress能够绑定到除本地主机之外的其他内容。<binding protocol="http" bindingInformation="*:8081:localhost" /> <binding protocol="http" bindingInformation="*:8083:192.168.2.102" /> - Daniel B. Chapman
24
备忘录:如果出现“访问被拒绝”的情况,必须以管理员身份运行Visual Studio。 - nVentimiglia
37
更新Visual Studio 2015:在Visual Studio 2015中,IIS Express配置文件已经移动。它们现在是针对每个项目单独的,并存储在/{project folder}/.vs/config/applicationhost.config中。http://johan.driessen.se/posts/Accessing-an-IIS-Express-site-from-a-remote-computer - Shane Castle
8
Visual Studio 2017转换到2019的更新:文件已从 /{project folder}/.vs/config/applicationhost.config 移动到 /{project folder}/.vs/{solution name}/config/applicationhost.config。我遇到了支持两个版本的VS的问题,忘记修改正确的配置文件。 - TabsNotSpaces
显示剩余9条评论

106

为了让IIS Express响应于任何IP地址,只需将地址留空即可,例如:

bindingInformation=":8080:"

在更改生效之前,请不要忘记重新启动IIS Express。


35
为了绑定除“localhost”以外的内容,IIS Express必须以管理员身份运行。如果从“VS 2010”启动,请以管理员身份运行“VS 2010”。 - Eric J.
5
自己注意:如果遇到“访问被拒绝”的情况,要用管理员身份运行 Visual Studio。 - nVentimiglia
4
仅补充一下,对于像我一样在三个小时内遇到问题的人,applicationhost.conifg 文件中有许多 bindinginformation 属性,请选择属于您网站的那一个! - Ghasan غسان
7
确保以管理员身份运行Visual Studio,并设置bindingInformation=":8080:"而不是bindingInformation="*:8080:*",以防止Visual Studio在重新启动后编写新的<site>条目。 - Tod Thomson
4
这个解决方法对我很有用:bindingInformation=":8080:"。由于某些原因,.NET Core Web 应用程序中的 *8080* 无法工作。别忘了运行 netsh:netsh http add urlacl url=http://*:8080/ user=\Everyone,以避免将 VS 作为管理员运行,并在 Windows 防火墙或管理防火墙设置的应用程序中添加此端口的防火墙规则。 - Daniel Bogdan
显示剩余6条评论

46

如上所述,编辑应用程序的 host.config 文件。一个简单的方法是在使用 IIS Express 运行您的站点时,在 VS 中右键单击系统托盘图标,显示所有应用程序。选择您的站点,然后点击底部的配置链接来打开它。

我建议添加另一个绑定条目,并保留最初的本地主机(localhost)条目。这个额外的绑定将出现在 IIS Express 系统托盘下作为站点下的独立应用程序。

为了避免必须以管理员身份运行 VS(有很多不使用管理员权限的好理由),请按照以下 netsh 规则进行添加(显然要替换 IP 和端口为您的值)- 您需要一个管理员 cmd.exe 来执行此操作,它只需要运行一次:

netsh http add urlacl url=http://192.168.1.121:51652/ user=\Everyone

netsh可以添加如url=http://+:51652/的规则,但我无法将其与IIS Express很好地配合使用。您可以使用netsh http show urlacl列出现有规则,并且可以使用netsh http delete urlacl url=blah删除这些规则。

更多信息请参见:http://msdn.microsoft.com/en-us/library/ms733768.aspx


4
谢谢提到如何找到配置文件。 - Behnam Esmaili
2
我已经成功地使用了 netsh http add urlacl url=http://*:10368/ user=everyone<binding protocol="http" bindingInformation=":10368:" />(使用 "*" 而不是 "+")来使 IIS Express 绑定到所有可用的 IP 地址。 - knee-cola
netsh 没有阻止我必须以管理员身份运行。天啊,我放弃了。 - Ian Warburton
你如何在 HTTPS 部分实现这个? - JHBonarius

16

以下是我需要完成的所有更改,以便在使用IIS Express运行我的x64位IIS应用程序时,它可以被远程主机访问:

iisexpress /config:"C:\Users\test-user\Documents\IISExpress\config\applicationhost.config" /site:MyWebSite
Starting IIS Express ...
Successfully registered URL "http://192.168.2.133:8080/" for site "MyWebSite" application "/"
Registration completed for site "MyWebSite"
IIS Express is running.
Enter 'Q' to stop IIS Express

配置文件(applicationhost.config)添加了以下部分:

<sites>
  <site name="MyWebsite" id="2">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
      <virtualDirectory path="/" physicalPath="C:\build\trunk\MyWebsite" />
    </application>
    <bindings>
      <binding protocol="http" bindingInformation=":8080:192.168.2.133" />
    </bindings>
  </site>

启用.NET框架64位版本的方法如下:

<globalModules>
    <!--
        <add name="ManagedEngine" image="%windir%\Microsoft.NET\Framework\v2.0.50727\webengine.dll" preCondition="integratedMode,runtimeVersionv2.0,bitness32" />
        <add name="ManagedEngineV4.0_32bit" image="%windir%\Microsoft.NET\Framework\v4.0.30319\webengine4.dll" preCondition="integratedMode,runtimeVersionv4.0,bitness32" />
    -->             
    <add name="ManagedEngine64" image="%windir%\Microsoft.NET\Framework64\v4.0.30319\webengine4.dll" preCondition="integratedMode,runtimeVersionv4.0,bitness64" />

非常详细的回答。希望我能够点赞+50。感谢您在其中提供了applicationHost.config的路径和所有细节。谢谢。 - raddevus

10

修改 bindingInformation=":8080:"

并记得关闭IISExpress的防火墙


允许 IIS Express 通过防火墙并不能解决问题,只有打开端口才行。 - Andrii

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接