如何在IIS Express中启用外部请求?


466

如何在IIS Express中启用远程请求?斯科特·格思里(Scott Guthrie)写道,这是可能的,但他没有透露具体方法。


25
有一个免费的VS扩展这一点,我们写visualstudiogallery.msdn.microsoft.com/...
吉姆W¯¯说起用莫妮卡

@JimW Jim,您是该插件的创建者吗?请您解释一下软件工程的奇迹是如何运作的吗?
伊恩·沃伯顿

@IanWarburton感谢您称其为奇迹!这是一个反向代理服务器。
Jim W说要

@JimW感谢您创建它。
伊恩·沃伯顿

@JimW我尝试了您的插件,并按照您在教程中所说的进行了所有操作。但我仍然无法访问我的本地主机
mark_spencer

Answers:


403

IIS团队网站上有一篇博客文章,现在解释如何在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)


121
在503错误的情况下,看到:stackoverflow.com/questions/5442551/...
deerchao

5
是否有netsh命令允许任何主机名上的连接?
Panic Panic

33
仅作记录,如果您使用非英语的Windows计算机,则参数user={PARAM_USER}将使用您自己的语言。
GoRoS 2014年

7
在url参数中使用通配符(例如url = http:// *:8080 /)将使连接适用于主机名和计算机的IP地址。
Anders

2
万一该命令失败(可能是错误1789),请考虑该命令期望使用您的PC语言的用户。因此,例如,如果您的PC是葡萄牙语,请使用user=todos代替user=everyone
Vitor Canova

348

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

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

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

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

everyoneWindows组在哪里。对带有空格的组使用双引号,例如“ Tout le monde”。

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

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

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

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

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


22
注意如果您运行的是Windows的本地化版本的参数users=everyonenetsh(第二步)可能会导致错误1789年解决方案是把everyone以自己的语言对应的组名。
mflodin

5
您如何获得一个Visual Studio项目来接受该绑定?在项目属性中的指定位置Project Url,如果我输入星号作为主机名,则会出现错误。如果输入其他任何内容,它将尝试创建新的虚拟目录。它不会链接到application.config中的条目。
Trevor Elliott

20
若要使其在Visual Studio中工作,必须在步骤1 bindingInformation="*:8080:hostname"和步骤2中使用计算机的主机名url=http://hostname:8080/,并且在“ Web”选项卡上的Visual Studio Web项目属性中,将“项目URL”设置为http://hostname:8080/*如果您已经创建了urlacl,请删除它;如果两者兼而有之,那将是行不通的。最后,您在Web浏览器中访问的URL必须引用主机名,而不是localhost。
Joe Daley 2014年

5
我也必须在bindings元素中有一个localhost行,否则Visual Studio 2013会尝试创建重复的站点条目。例如:<binding protocol="http" bindingInformation="*:8080:localhost" />
kristianp 2014年

3
我还需要以管理员身份运行Visual Studio,但是这个答案是最彻底的。
dlsso 2015年

127

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

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

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

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

iisexpress-proxy 8080 to 3000

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

在大多数情况下,越简单越好。


3
感谢您的出色解决方案!
夏令

1
而且我可能会补充说,像这样的Node.js解决方案是唯一可以在Azure上可靠运行的解决方案,因为Azure生成会自动生成applicationhost.config文件并清除您的绑定更改。
TheHansinator 2015年

1
在ngrok不能按预期工作后,我已经在Mac和ngrok上开始使用IIS Express代理(因为我没有完成所需的IIS Express配置操作)。非常便利!谢谢。
2016年

1
到目前为止,这是最简单的解决方案。如果不需要,我宁愿不要搞乱applicationhost.config。
skalpin

4
优秀的解决方案!现在返回并撤消我对IIS Express造成的混乱。
米奇·斯图尔特

123

在找到iisexpress-proxy之前,对我没有任何帮助。

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

npm install -g iisexpress-proxy

然后

iisexpress-proxy 51123 to 81

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

编辑:我目前正在使用 ngrok


7
无痛解决方案
bahadir

4
我能找到的最简单的解决方案。应该可以将该软件包重命名为类似web-proxy的名称,因为您可以将其用于转发iisexpress以外的其他功能:)
Mario Tacke

8
@xgp-嗨,我是iisexpress-proxy的作者:-)您最终设法使它成功了吗?您必须关闭并重新打开命令提示符,或者在极少数情况下重新启动操作系统。如果您还有其他问题,请在项目页面(github.com/icflorescu/iisexpress-proxy)上给我一行,如果有时间,我会尽力帮助。
Ionut-Cristian Florescu

1
谢谢大家使用它和您的客气话:-)。@MarioTacke-是的,我知道,但是更多的人可以通过谷歌搜索找到它,如果它被称为iisexpress-proxy :-)
Ionut-Cristian Florescu

1
顺便说一句,这不适用于Windows身份验证。
汤姆

35

作为对此的补充说明:

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

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

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

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


33

一个很好的资源是使用IISExpress在开发时使用SSL更容易由Scott Hanselman的。

您要做的是让IIS Express通过端口80外部提供服务的部分


这篇博客文章建议将端口80隔离到“ IISExpressWeb.exe”。当前版本的IIS Express缺少此名称的exe-只有IISExpress.exe和IISExpressTray.exe。将连接隔离到任一位置都可以防止外部连接。消除进程限制就可以建立连接。目标是什么合适的.exe?
克里斯·莫斯基尼

33

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

  1. ipconfig在Windows命令行中获取主机IP地址:
  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. 添加: <binding protocol="http" bindingInformation="*:62549:192.168.178.108"/>
    带有您的IP地址

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

20

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

在此处输入图片说明

通过Conveyor,您可以从网络上的外部平板电脑和手机或Android模拟器(不带http://10.0.2.2:<hostport>)测试Web应用程序

这些步骤在以下链接中:

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


@kilianeller,请点击答案中的链接,并在此处提出问题,我们可以为您提供帮助。
Jim W说要

Workst !!,我证明了所有其他解决方案(更改applicationhost.config,netsh,IPv6地址。),什么也没做,但是最终安装成功,唯一的小问题是IP地址的方向错误,但不是严重的问题。
离子

真的很容易安装。只要确保按照扩展页面上的说明将证书添加到远程浏览器中即可。
安德烈斯(Andres)

我不敢相信,它有效!非常简单,非常优雅!我花了最后5个小时才寻找空的解决方案,最后我发现了这一点!
Ziggy192 '18

10

如果您尝试过Panic上校的回答但在Visual Studio中不起作用,请尝试以下操作:

<binding />在IIS Express配置中附加另一个

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

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


不幸的是,似乎不适合我的工作。我仍然可以连接被拒绝当我尝试访问端口8080上我的本地IP
托马斯Teilmann

@ThomasTeilmann,在Visual Studio中,我必须打开Web应用程序的属性,然后在“ Web”选项卡下,将“ Project Url”更改为使用备用主机名而不是localhost。
2015年

@ThomasTeilmann,哦,我想您需要通过主机名而不是IP浏览到它。
2015年

实际上,我也尝试过这两种方法,但它
不适

这就是我的答案(即以管理员身份运行VS)-谢谢@Bruce。此外,我还必须手动修复防火墙设置。在我的情况下(即测试我的iPhone可以浏览我的开发机),在防火墙上打开端口8080不起作用(是吗?),但是通过ip打开访问权限(例如,范围>本地IP = 10.0.0.0/24 =我的家)网络)就成功了。
伊兰2016年

8

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

IISExpress配置


2
这个答案为我指出了另一种解决方案,编辑applicationhost.config以接受:55665:而不是*:55665:localhost
Deko

感谢@Deko-您的评论以及其他一些答复中提到的netsh命令使它对我有用。
马塞尔·波佩斯库

8

这是我对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以admin身份打开一个新提示,然后运行以下命令:

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

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

在此处输入图片说明


为我工作!:)还有一个很好的帖子在这里:blog.kloud.com.au/2017/02/27/...
Leniel Maccaferri

我尝试了包括ngrok在内的所有其他尝试都无济于事。第一次尝试就可以了。
kooldave98

5

该问题的公认答案是使IIS Express与webmatrix一起使用的指南。当尝试使其与VS 2010配合使用时,我发现本指南更有用。

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


您链接的说明失去了从Visual Studio调试的能力,至少在我看来,这毫无意义-使用IIS或任何其他远程服务器将是一样的好或更好的(因为您至少可以在IIS上设置远程调试)。如果IIS Express在不需要localhost的情况下不需要管理员权限就可以运行。很烦人。
克里斯·莫斯基尼

这正是我想要的-谢谢!我将IIS Express与Visual Studio 2010一起使用,并打算在我的LAN上测试ASP.NET MVC3应用程序,而这正是我要使其正常工作所需的条件:)
Lasse Christiansen

5

您可以尝试设置端口转发,而不是尝试修改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并将本地主机绑定到IPv6是关键。谢谢!
TomaszGuzialek '17

我尝试配置的计算机具有另一个本地地址。它被命名为“ local-dev”。我只需要绑定添加v4tov6 listenport = 3000 connectaddress = local-dev connectport = 60000 即可使其工作。很棒的帖子,谢谢!
阿妮卡

4

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

https://ngrok.com/

它可以与在localhost上运行的任何东西一起工作。只需注册,运行一点可执行文件,无论您在localhost上运行什么,都可以从任何地方访问公共URL。

这非常适合向远程队友显示内容,而无需摆弄IIS安装程序或防火墙。要停止访问只是终止可执行文件。

ngrok authtoken xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

ngrok http -host-header=localhost 89230

假设89230是您的IIS Express端口

您还可以免费运行多个端口


1
谁会认为我将不得不仔细阅读这么多答复,直到找到解决方案……
alexkovelsky

3

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

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

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

工作正常!


2

如果您从Admin运行Visual Studio,则可以仅添加

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

要么

<binding protocol="https" bindingInformation="*:8443:*" />

进入

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

1
我将此配置应用到了,$(SolutionDir).vs\config\applicationHost.config并且还不得不在Windows防火墙中打开应用程序的端口(8443)。
Tonatio

2

我启用了本地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中。
Mahdi Ghiasi

1

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

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

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

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

1

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

在此处输入图片说明

希望能帮助到你。


0

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


0

这真是太棒了,甚至涵盖了具有漂亮域名的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的证书属性中获得的“缩略图”。


0

我做了以下工作并能够连接:

1)将IIS Express配置绑定从本地主机更改为'*'

绑定协议=“ http” bindingInformation =“ *:8888:*”

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

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


由于您是在提出此问题6年后才提出这个问题的,而且已经有其他12个答案,因此最好编辑 ed的答案以说明您的答案比其他12个问题的效果更好(或至少如何回答)是不同的)。
异端猴子

0

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

在此处输入图片说明


我正在使用VS2019。
PJ3

-1

[项目属性对话框]

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

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

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

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

3)在防火墙中添加一个允许规则,以允许选定端口上的传入TCP流量(我的防火墙通过对话框触发:“阻止或将规则添加到防火墙”)。在这种情况下,Add将起到作用。

上述解决方案的缺点:

1)如果使用动态IP地址,则在分配了另一个IP地址的情况下,您需要重做上述步骤。

2)您的服务器现在有一个开放的端口,您可能会忘记它,但是此开放的端口仍然是不需要的访客的邀请。

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.