使用IIS Express托管网站(临时)


71

我有一个网站(MVC3),用于开发,该网站托管在IIS Express中。(我遇到了Cassini Devserver的错误,必须升级...)现在,我想知道,是否可以让本地网络(位于路由器后面)上的其他计算机看到该计算机上托管的站点?(例如,如果我将http://my.local.ip:port写入与我位于同一局域网中的浏览器中,页面是否会加载?)


1
@约翰·桑德斯:做到了。不工作
TDaver 2011年

1
愿意分享结果吗?“无效”是什么意思?
约翰·桑德斯

这意味着该页面未加载(服务器未响应),因此我猜测IIS Express无法回答非本地主机请求(如Cassini)。但是由于IIS Express是一台完整的服务器,因此应该可以。
TDaver 2011年

Answers:


121

默认情况下,IIS Express仅处理本地主机请求。要处理外部请求,请编辑applicationhost.config文件(位于中%userprofile%\documents\iisexpress\config\),然后更改localhost'*'或您的计算机名称。(记住非本地主机绑定,您必须以管理员身份运行或将URL acl设置为管理员,然后以非管理员身份运行iisexpress)


1
我在config xml中找到了我的网站,并更改<binding protocol="http" bindingInformation="*:44886:localhost" /><binding protocol="http" bindingInformation="*:44886:*" />。然后在管理员模式(netsh http add urlacl url=http://+:44886/ user=\Everyone)中添加url acl 。现在,当我在Visual Studio中按F5时,出现“无法启动IIS Express”。
TDaver 2011年

40
运行此命令“ netsh http add urlacl url = http:// *:44886 / user = Everyone”,然后尝试重新启动它(按F5键)。这应该工作。下面的链接还可以帮助learn.iis.net/page.aspx/1005/...
vikomall

3
仅供参考,您必须重新启动服务才能使其生效,否则会出现503错误。svc重新启动后,对我来说完美的作品。
凯文(Kevin)

1
@KevinWon我应该重新启动的服务的名称是什么?
穆罕默德·优素福2014年

1
@CiaranBruen:两个链接都指向同一页面(现在,无论如何)。
B. Clay Shannon 2014年

12

另外,您可以使用AnalogX的PortMapper之东西充当小型回送代理,以将本地主机绑定的端口隧道化为公共开放的端口。

例如,

  • IISExpress在本地绑定到localhost:8080
  • PortMapper端口9090配置为将流量中继到localhost:8080

实际上,端口9090(由PortMapper打开)上的任何连接都将通过隧道传送到localhost:8080;从而绕过所有的netsh废话,有时可能会很痛苦。

下面是我的配置:

PortMapper配置

使用此代理方法的好处是,它不会在本地dev框中永久公开一个开放的IISExpress端口。

很少有时候我想公开开放港口开会。但大多数情况下,该端口应关闭,并且只能由localhost访问。每次都在路由器上修改防火墙规则是很痛苦的。这是我的设置方法:

  • 我的路由器防火墙将9090端口转发到PortMapper
  • 端口映射只有继续进行代理的流量IISExpress(监听8080)仅当端口映射程序正在运行。

注意

确保关闭所有PortMapper窗口,以使所有更改生效。

笔记2

如其他人所述,您可能需要在以下位置为应用程序调整IISExpress绑定:

 My Documents\IISExpress\applicationhost.config
 project\.vs\config\applicationhost.config

像这样:

<bindings>
  <!-- bindingInformaiton format:
          IPToBindTo:Port:DNSHostName -->

  <!--OLD:
  <binding protocol="http" bindingInformation="*:8080:localhost"/>-->

  <!--Change '*' to 127.0.0.1 and remove 'localhost' right of the port number
      to avoid invalid DNS hostname errors -->
  <binding protocol="http" bindingInformation="127.0.0.1:8080:" />

</bindings>

这个想法很好(我肯定会在其他情况下使用此代理),但是在这种情况下不起作用。当尝试通过其IP访问站点时,IIS Express会为您提供以下信息: HTTP Error 400. The request hostname is invalid.
MEMark 2013年

我更新了答案;希望能解决您的“主机名”无效错误。
Brian Chavez 2013年

6

我相信,要成功实现此目标,可通过三个步骤:

1)添加一个dns条目或主机条目,以便其他计算机可以查找开发计算机的ip地址

2)像这样在%userprofile / documents / IISExpress / Config中向applicationhost.config添加一个绑定

<site name="MobileDashboard(2)" id="7">
                <bindings>
                    ...
                    <binding protocol="http" bindingInformation="*:yourport#:yourmachinendnsname" />
                </bindings>
            </site>

3)运行此处找到的命令以允许传入请求:

netsh http add urlacl url=http://yourmachinendnsname:yourport#/ user=everyone

所以这是我需要添加到C:\ Windows \ System32 \ drivers \ etc \ hosts的内容:<我的IP地址> localhost ...例如:192.168.125.50 localhost吗?
B. Clay Shannon 2014年



0

是的,您可以使用iis Express配置尽可能多的站点以供本地局域网使用,这里的链接是从Lan IIS Express访问本地站点的链接,其中解释了如何实现此目的。


我试过了,对我没用。如果可以的话,这将是最干净的答案。多余的应用程序(具有LAN IP地址的应用程序)没有显示在我的站点下的IIS Express中,只有本地主机显示。可能会缺少一步吗?我确实退出/重新启动了IIS Express。我applicationhost.config看上去像<binding protocol="http" bindingInformation="*:23297:localhost" /> <binding protocol="http" bindingInformation="*:23297:192.168.1.254" />
toddmo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.