【问题标题】:How to enable external request in IIS Express?如何在 IIS Express 中启用外部请求?
【发布时间】:2011-03-19 19:44:09
【问题描述】:

如何在 IIS Express 中启用远程请求? Scott Guthrie wrote that is possible 但他没有说怎么做。

【问题讨论】:

  • 我们为此编写了一个免费的 VS 扩展 visualstudiogallery.msdn.microsoft.com/…
  • @JimW Jim,您是该插件的创建者吗?请您解释一下这个软件工程的奇迹是如何运作的?
  • @IanWarburton 感谢您称其为奇迹!这是一个反向代理服务器。
  • @JimW 感谢您创建它。
  • @JimW 我尝试了你的插件,并按照你在教程中所说的那样做。但我仍然无法访问我的本地主机

标签: c# asp.net iis-express


【解决方案1】:

IIS 团队网站上有一篇博文,现在解释如何enable remote connections on IIS Express。以下是该帖子的相关部分总结:

在 Vista 和 Win7 上,从管理提示符运行以下命令:

netsh http add urlacl url=http://vaidesg:8080/ user=everyone

对于 XP,首先安装 Windows XP Service Pack 2 支持工具。然后在管理提示符下运行以下命令:

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

【讨论】:

  • 如果出现 503 错误,请参阅:stackoverflow.com/questions/5442551/…
  • 是否有netsh 命令允许any 主机名上的连接?
  • 仅作记录,如果您有非英语语言的 Windows 机器,user={PARAM_USER} 的参数将使用您自己的语言。
  • 在 url 参数中使用通配符(例如 url=http://*:8080/)将使主机名和计算机 IP 地址的连接都有效。
  • 如果命令失败(可能是错误 1789),请考虑该命令希望用户使用您的 PC 语言。因此,例如,如果您的 PC 使用葡萄牙语,请使用 user=todos 而不是 user=everyone
【解决方案2】:

您可能需要进行三项更改。

  1. 告诉 IIS Express 自身绑定到所有 IP 地址和主机名。在您的 .config 文件中。通常:
    • 对比 2015: $(solutionDir)\.vs\config\applicationhost.config
    • %userprofile%\My Documents\IISExpress\config\applicationhost.config

找到您网站的绑定元素,然后添加

    <binding protocol="http" bindingInformation="*:8080:*" />
  1. 设置名为“http.sys”的 Windows 位。以管理员身份运行以下命令:
    netsh http add urlacl url=http://*:8080/ user=everyone

everyone 是一个窗口组。对带有空格的组使用双引号,例如“Tout le monde”。

  1. 允许 IIS Express 通过 Windows 防火墙。

    开始/具有高级安全性的 Windows 防火墙/入站规则/新规则...

    程序%ProgramFiles%\IIS Express\iisexpress.exe
    或端口 8080 TCP

现在,当您启动 iisexpress.exe 时,您应该会看到一条消息,例如

成功为站点“hello world”应用程序“/”注册 URL“http://*:8080/”

【讨论】:

  • 注:如果您运行的是 Windows 的本地化版本,netsh 的参数 users=everyone(第二步)可能会导致错误 1789。解决方案是将 everyone 翻译成您的语言对应的组名称。
  • 如何让 Visual Studio 项目接受该绑定?在您指定Project Url 的项目属性中,如果我为主机名输入星号,则会出现错误。如果我输入其他任何内容,它会尝试创建一个新的虚拟目录。它没有链接到 application.config 中的条目。
  • 要使其在 Visual Studio 中工作,您必须在步骤 1 bindingInformation="*:8080:hostname" 和步骤 2 url=http://hostname:8080/ 中使用计算机的主机名,并在 Web 选项卡集 Project 上的 Visual Studio Web 项目属性中使用网址为http://hostname:8080/。如果您已经创建了* urlacl,请删除;如果你两者都有,它就行不通。最后,您在 Web 浏览器中访问的 URL 必须引用主机名,而不是 localhost。
  • 我还必须在 bindings 元素中有一个 localhost 行,否则 Visual Studio 2013 会尝试创建重复的站点条目。例如:&lt;binding protocol="http" bindingInformation="*:8080:localhost" /&gt;
  • 我还需要以管理员身份运行 Visual Studio,但这个答案是最彻底的。
【解决方案3】:

在我找到 iisexpress-proxy 之前,没有什么对我有用。

以管理员身份打开命令提示符,然后运行

npm install -g iisexpress-proxy

然后

iisexpress-proxy 51123 to 81

假设您的 Visual Studio 项目在 localhost:51123 上打开,并且您想要访问外部 IP 地址 x.x.x.x:81

编辑:我目前正在使用ngrok

【讨论】:

  • 无痛解决方案
  • 我能找到的最简单的解决方案。可能应该将包重命名为 web-proxy 之类的东西,因为您可以将其用于转发 iisexpress 以外的其他用途 :)
  • @xgp - 嗨,我是 iisexpress-proxy 的作者 :-) 你最终让它为你工作了吗?您必须关闭并重新打开命令提示符,或者在极少数情况下重新启动操作系统。如果您还有其他问题,请在项目页面 (github.com/icflorescu/iisexpress-proxy) 中给我留言,如果我有时间,我会尽力提供帮助。
  • 感谢大家使用它和您的客气话:-)。 @MarioTacke - 是的,我知道,但是如果它被称为 iisexpress-proxy,更多人可以通过谷歌搜索找到它 :-)
  • 顺便说一句,这不适用于 Windows 身份验证。
【解决方案4】:

我记得几个月前在尝试此工作流程时遇到了同样的问题。

这就是为什么我专门为这种情况编写了一个简单的代理实用程序:https://github.com/icflorescu/iisexpress-proxy

使用IIS Express Proxy,一切都变得非常简单——无需“netsh http add urlacl url=vaidesg:8080/ user=everyone”或弄乱您的“applicationhost.config”。

只需在命令提示符下发出此命令:

iisexpress-proxy 8080 to 3000

...然后您可以将您的远程设备指向http://vaidesg:3000

大多数时候越简单越好。

【讨论】:

  • 感谢您的出色解决方案!
  • 我可能会补充一点,像这样的 Node.js 解决方案是唯一可以在 Azure 上可靠运行的解决方案,因为 Azure 构建会自动生成 applicationhost.config 文件并删除您的绑定更改。
  • 在 ngrok 没有按预期工作后,我开始在我的 Mac 上使用 IIS Express 代理和 ngrok(因为我没有完成所需的 IIS Express 配置操作)。非常便利!谢谢。
  • 这是迄今为止最简单的解决方案。如果没有必要,我不想弄乱 applicationhost.config。
  • 优秀的解决方案!现在返回并消除我对 IIS Express 造成的混乱。
【解决方案5】:

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

  1. 在 Windows 命令行中获取您的主机 IP 地址:ipconfig
  2. 转到

    $(SolutionDir)\.vs\config\applicationHost.config
    
  3. 寻找

    <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>
    
  4. 添加: &lt;binding protocol="http" bindingInformation="*:62549:192.168.178.108"/&gt;
    使用您的 IP 地址

  5. 以管理员权限运行 Visual Studio,一切正常
  6. 如果您尝试从远程连接,可能会寻找一些防火墙问题

【讨论】:

  • 这不起作用。这就是为什么投反对票
  • @William 也许你忘记了什么——对于其他人来说,它似乎有效
【解决方案6】:

作为旁注:

netsh http add urlacl url=http://vaidesg:8080/ user=everyone

这仅适用于英文版 Windows。如果您使用的是本地化版本,则必须将“everyone”替换为其他内容,例如:

  • 使用荷兰语版本时的“Iedereen”
  • 使用德语版本时的“Jeder”
  • 使用匈牙利语版本时的“Mindenki”

否则会报错(创建 SDDL 失败,错误:1332)

【讨论】:

    【解决方案7】:

    Scott Hanselman 的 Working with SSL at Development Time is easier with IISExpress 是一个很好的资源。

    您所追求的是让 IIS Express 通过端口 80 对外提供服务

    部分

    【讨论】:

    • 这篇博文建议将端口 80 隔离到“IISExpressWeb.exe”。当前版本的 IIS Express 缺少此名称的 exe - 只有 IISExpress.exe 和 IISExpressTray.exe。隔离与任一者的连接可防止与外部的连接;消除进程限制允许连接。什么是正确的 .exe 目标?
    【解决方案8】:

    我通过在 Visual Studio Professional 2015 中安装“Conveyor by Keyoti”解决了这个问题。Conveyor 使用启用外部请求的端口 (45455) 生成远程地址(您的 IP)。示例:

    Conveyor 允许您从网络上的外部平板电脑和手机或 Android 模拟器(不带 http://10.0.2.2:&lt;hostport&gt;)测试 Web 应用程序

    步骤如下:

    https://marketplace.visualstudio.com/items?itemName=vs-publisher-1448185.ConveyorbyKeyoti

    【讨论】:

    • @kilianeller 请点击答案中的链接并在那里提问,我们可以为您提供帮助。
    • Workst !!,我证明了所有其他解决方案(更改 applicationhost.config,netsh,IPv6 地址..),但什么也没做,但最终安装这个 Works,唯一的小问题是错误的 IP 地址,但不是很严重的问题。
    • 真的很容易安装。只需确保按照扩展页面上的说明在远程浏览器上添加证书即可。
    • 我不敢相信,它有效!!!如此简单,如此优雅!我花了最后 5 个小时才寻找空的解决方案,最后我找到了这个!
    • 像魅力一样工作!,这应该是最好的答案
    【解决方案9】:

    对我有帮助的是右键单击“IISExpress”图标“显示所有应用程序”。然后选择网站,我看到它使用了哪个 aplicationhost.config,并且更正完美。

    【讨论】:

    • 这个答案为我指出了另一个解决方案,编辑 applicationhost.config 以接受 :55665: 而不是 *:55665:localhost
    • 感谢@Deko——你的评论,加上其他一些回复中提到的 netsh 命令,使它对我有用。
    【解决方案10】:

    这是我为 Windows 10 和 Visual Studio 2015 所做的,以启用远程访问,包括 http 和 https:

    第一步是将您的应用程序绑定到您的内部 IP 地址。运行 cmd -> ipconfig 以获取地址。打开文件/{project folder}/.vs/config/applicationhost.config 并向下滚动,直到找到如下内容:

    <site name="Project.Web" id="2">
        <application path="/">
            <virtualDirectory path="/" physicalPath="C:\Project\Project.Web" />
        </application>
        <bindings>
            <binding protocol="http" bindingInformation="*:12345:localhost" />
        </bindings>
    </site>
    

    bindings 下添加两个新绑定。如果您愿意,也可以使用 HTTPS:

    <binding protocol="http" bindingInformation="*:12345:192.168.1.15" />
    <binding protocol="https" bindingInformation="*:44300:192.168.1.15" />
    

    将以下规则添加到您的防火墙,以管理员身份打开一个新的cmd 提示符并运行以下命令:

    netsh advfirewall firewall add rule name="IISExpressWeb" dir=in protocol=tcp localport=12345 profile=private remoteip=localsubnet action=allow
    
    netsh advfirewall firewall add rule name="IISExpressWebHttps" dir=in protocol=tcp localport=44300 profile=private remoteip=localsubnet action=allow
    

    现在以 Administrator 启动 Visual Studio。右键单击 web 项目项目文件并选择 Properties。转到Web 选项卡,然后单击Create Virtual Directory。如果 Visual Studio 没有以管理员身份运行,这可能会失败。现在一切正常。

    【讨论】:

    • 为我工作! :) 这里还有一个不错的帖子:blog.kloud.com.au/2017/02/27/…
    • 我尝试了其他所有方法,包括 ngrok 均无济于事。这在第一次尝试时有效。
    • 我发现你也可以这样做"*:12345:*" 省去一个步骤来查找你的 IP 地址或处理通过 DHCP 更改的 IP 地址
    【解决方案11】:

    如果您尝试过 Colonel Panic's answer 但在 Visual Studio 中不起作用,请尝试以下操作:

    在 IIS Express 配置中添加另一个 &lt;binding /&gt;

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

    最后,您必须以管理员身份运行 Visual Studio

    【讨论】:

    • 不幸的是,这对我来说似乎不起作用..当我尝试访问端口 8080 上的本地 IP 时,连接仍然被拒绝
    • @ThomasTeilmann,在 Visual Studio 中,我必须打开 Web 应用程序的属性,然后在 Web 选项卡下,将“Project Url”更改为使用备用主机名而不是 localhost。
    • @ThomasTeilmann,哦,我认为您需要通过主机名而不是 IP 来浏览它。
    • 实际上我也尝试了这两种方法,但它不适用于云实例:/ 谢谢
    • 这就是我的答案(即以管理员身份运行 VS) - 谢谢@Bruce。此外,我还必须手动修复我的防火墙设置。在我的情况下(即测试我的 iphone 可以浏览我的开发机器)在防火墙上打开端口 8080 不起作用(嗯?)但通过 ip 打开访问(即 Scope > Local IPs = 10.0.0.0/24 = my home网络)成功了。
    【解决方案12】:

    结合这个线程中的答案,这就是我修复它的方法(Visual Studio 2019):

    1. 以管理员身份启动 Visual Studio,然后像往常一样运行您的 Web 服务。

    2. 在任务栏上找到 IIS Express 图标,右键单击它,然后单击“显示所有应用程序”。

    3. 选择您的 Web 服务并注意下面显示的配置路径。点击配置文件打开它进行编辑。

    4. 在这个配置文件中找到你的网络服务(例如搜索你的端口),然后找到这样的一行: *:你的端口:localhost

    5. 在此之后添加一个新行,如下所示:

      :你的端口*

    在这种情况下,无需创建具有将来可能更改的特定 IP 地址的绑定。

    我希望这对那里的人有所帮助。

    【讨论】:

    • 这解决了我对 android avd 在 localhost:port 上消耗 rest api 的要求
    【解决方案13】:

    我发现的最简单最酷的方法是使用(设置需要 2 分钟):

    https://ngrok.com/

    它适用于在 localhost 上运行的任何东西。只需注册,运行很少的可执行文件,您在 localhost 上运行的任何内容都会获得您可以从任何地方访问的公共 URL。

    这非常适合向远程团队成员展示内容,无需摆弄 IIS 设置或防火墙。想要停止访问只需终止可执行文件。

    ngrok authtoken xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    
    ngrok http -host-header=localhost 89230
    

    假设 89230 是您的 IIS Express 端口

    即使是免费计划,您也可以运行多个端口

    【讨论】:

    • 谁能想到我必须通读这么多回复才能找到解决方案...
    • 伙计,我几乎放弃了 ngrok,因为我总是得到一个 Bas Request 400 Invalid hostname。使用-host-header 解决了它。非常感谢!
    【解决方案14】:

    这个问题的公认答案是让 IIS Express 与 webmatrix 一起工作的指南。我发现this guide 在尝试让它与 VS 2010 一起工作时更有用。

    我只是按照第 3 步和第 4 步(以管理员身份运行 IIS Express),不得不暂时禁用我的防火墙以使其正常工作。

    【讨论】:

    • 您链接的说明失去了从 Visual Studio 调试的能力,至少在我看来这使它毫无意义 - 使用 IIS 或任何其他远程服务器会一样好或更好(因为您可以设置至少在 IIS 上进行远程调试)。如果 IIS Express 不需要管理员权限就可以在没有 localhost 的情况下运行,这将起作用。很烦人。
    • 这正是我想要的——谢谢!我正在将 IIS Express 与 Visual Studio 2010 一起使用,并打算在我的 LAN 上测试一个 ASP.NET MVC3 应用程序,而这正是我工作所需要的 :)
    【解决方案15】:

    您可以尝试设置端口转发,而不是尝试修改 IIS Express 配置、添加新的 HTTP.sys 规则或以管理员身份运行 Visual Studio。

    基本上,您需要将您的网站运行的IP:PORT 转发到您机器上的其他一些空闲端口,但在外部网络适配器上,而不是本地主机上。

    问题是 IIS Express(至少在 Windows 10 上)绑定到 [::1]:port,这意味着它侦听 IPv6 端口。您需要考虑到这一点。

    这是我完成这项工作的方法 - http://programmingflow.com/2017/02/25/iis-express-on-external-ip.html

    希望对你有帮助。

    【讨论】:

    • 我正在运行 Windows 10 并将 localhost 绑定到 IPv6 是关键。谢谢!
    • 我尝试配置的计算机有另一个本地地址。它被命名为“本地开发”。我只需绑定 add v4tov6 listenport=3000 connectaddress=local-dev connectport=60000 即可使其工作。好帖子,谢谢!
    【解决方案16】:

    我在 Win 8.1 和外部请求中使用 IIS Express 时遇到了一些问题。

    我按照以下步骤调试外部请求:

    1. 安装 IIS
    2. 将 Visual Studio 配置为使用本地 IIS(Web 项目中的页面属性)
    3. 在 IIS 中创建专用 AppPool 以使用我的应用程序
    4. 在我的项目中,我使用的是 Oracle 客户端,并且必须是 32 位(64 位不适用于 Visual Studio),然后我需要在应用程序池中允许 32 位
    5. 将 Windows 防火墙配置为允许端口 80 中的请求(入站规则)

    它正在工作!

    【讨论】:

      【解决方案17】:

      访问外部请求的另一种方法是使用 IIS 而不是 IIS Express。 在我的视觉工作室中,我可以轻松切换。

      【讨论】:

      • 我用的是VS2019。
      【解决方案18】:

      如果您从管理员运行 Visual Studio,您可以只添加

      &lt;binding protocol="http" bindingInformation="*:8080:*" /&gt;

      &lt;binding protocol="https" bindingInformation="*:8443:*" /&gt;

      进入

      %userprofile%\My Documents\IISExpress\config\applicationhost.config
      

      【讨论】:

      • 我将此配置应用到$(SolutionDir).vs\config\applicationHost.config,而且我必须在Windows防火墙中打开应用程序的端口(8443)。
      【解决方案19】:

      我启用了本地 IIS,所以我刚刚为我的调试端口创建了一个重写规则...我认为这比其他方法更好更酷,因为一旦完成开发就更容易删除...这是如何改写样子..

      <rewrite>
          <rules>
              <rule name="ReverseProxyInboundRule1" stopProcessing="true">
                  <match url="^dev/(.*)" />
                  <action type="Rewrite" url="http://localhost:47039/{R:1}" />
              </rule>
          </rules>
      </rewrite>
      

      VS 还允许您直接使用本地 IIS 进行开发(然后允许远程连接),但反过来您必须始终以管理员身份运行它...我不喜欢那样。

      【讨论】:

      • 这也是我最喜欢的解决方案,谢谢 :) 我只需要先为我的 IIS 启用反向代理,然后将此规则添加到我的 web.config。
      【解决方案20】:

      我通过使用反向代理方法解决了这个问题。

      我安装了 wamp 服务器并使用了 apache web 服务器的简单反向代理功能。

      我添加了一个新端口来监听 Apache Web 服务器 (8081)。然后我将代理配置添加为该端口的虚拟主机。

      <VirtualHost *:8081>
      ProxyPass / http://localhost:46935/
      ProxyPassReverse / http://localhost:46935/
      </VirtualHost>
      

      【讨论】:

        【解决方案21】:

        我做了所有这些步骤,但没有任何帮助。 而我所需要的,只是通过 IIS Express 运行我的应用程序......

        希望对你有帮助。

        【讨论】:

          【解决方案22】:

          对我来说使用这个,相对简单,直接:

          通过在“扩展”对话框中搜索“Conveyor”来下载 Visual Studio 扩展。然后安装。

          形式: https://marketplace.visualstudio.com/items?itemName=vs-publisher-1448185.ConveyorbyKeyoti

          【讨论】:

            【解决方案23】:

            我无法向本地网络中的其他用户提供 iis 请求,我所要做的(除了上述之外)就是重新启动我的 BT Hub 路由器。

            【讨论】:

              【解决方案24】:

              这真是太棒了,甚至涵盖了带有漂亮域名的 HTTPS:

              http://www.hanselman.com/blog/WorkingWithSSLAtDevelopmentTimeIsEasierWithIISExpress.aspx

              如果上面的链接消失了,我在 SO 的其他任何地方都找不到真正棒的部分:

              > C:\Program Files (x86)\IIS Express>IisExpressAdminCmd.exe Usage:
              > iisexpressadmincmd.exe <command> <parameters> Supported commands:
              >       setupFriendlyHostnameUrl -url:<url>
              >       deleteFriendlyHostnameUrl -url:<url>
              >       setupUrl -url:<url>
              >       deleteUrl -url:<url>
              >       setupSslUrl -url:<url> -CertHash:<value>
              >       setupSslUrl -url:<url> -UseSelfSigned
              >       deleteSslUrl -url:<url>
              > 
              > Examples: 1) Configure "http.sys" and "hosts" file for friendly
              > hostname "contoso": iisexpressadmincmd setupFriendlyHostnameUrl
              > -url:http://contoso:80/ 2) Remove "http.sys" configuration and "hosts" file entry for the friendly  hostname "contoso": iisexpressadmincmd
              > deleteFriendlyHostnameUrl -url:http://contoso:80/
              

              以上实用程序将为您注册 SSL 证书!如果您使用 -UseSelfSigned 选项,则超级简单。

              如果你想以艰难的方式做事,不明显的部分是你需要告诉 HTTP.SYS 使用什么证书,像这样:

              netsh http add sslcert ipport=0.0.0.0:443 appid={214124cd-d05b-4309-9af9-9caa44b2b74a} certhash=YOURCERTHASHHERE
              

              Certhash 是您可以从 MMC 中的证书属性中获取的“指纹”。

              【讨论】:

                【解决方案25】:

                我执行了以下操作并能够连接:

                1) 将 IIS express 配置绑定从本地主机更改为“*”

                绑定协议="http" bindingInformation="*:8888:*"

                2) 在防火墙上定义入站规则以允许协议类型的特定端口:tcp

                3) 添加以下命令为您的端口添加网络配置: netsh http 添加 urlacl url=http://*:8888/ user=everyone

                【讨论】:

                • 由于您在被问到这个问题 6 年后才来回答这个问题,并且已经有 12 个其他答案,最好是您 edited 您的答案来解释您的答案如何更好地发挥作用比其他 12 个(或者至少是不同的)。
                【解决方案26】:

                [项目属性对话框]

                使用 VisualStudio 2017 和 NetCore API 项目进行开发:

                1) 在 Cmd-Box 中:ipconfig /all 确定 IP 地址

                2a) 在项目属性-> 调试选项卡中输入检索到的 IP 地址

                2b) 选择一个端口并将其附加到步骤 2a 中的 IP 地址。

                3) 在防火墙中添加允许规则以允许所选端口上的传入 TCP 流量 (我的防火墙通过对话框触发:“阻止或向防火墙添加规则”)。在这种情况下,添加会解决问题。

                上述方案的缺点:

                1) 如果您使用动态 IP 地址,则需要重新执行上述步骤,以防已分配另一个 IP 地址。

                2) 您的服务器现在有一个您可能会忘记的开放端口,但这个开放端口仍然是对不受欢迎的客人的邀请。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2017-03-12
                  • 1970-01-01
                  • 1970-01-01
                  • 2017-10-02
                  • 1970-01-01
                  • 2011-10-01
                  相关资源
                  最近更新 更多