通过局域网连接到Visual Studio调试IIS Express服务器

89

我有一个在VS2012中开发的测试ASP.NET MVC3应用程序。当我开始调试应用程序时,通过对http://localhost:<portnumber>的请求,可以从主机访问该应用程序。但是,如果我尝试通过内部网络的远程计算机访问相同的应用程序,使用http://<ip>:<portnumber>,我会收到HTTP错误400:错误的请求。无效的主机名。由于它运行在IIS Express上,所以任何服务器配置都无法访问。

有没有解决这个问题的方法?


使用我们的免费扩展程序Conveyor来完成此操作:https://marketplace.visualstudio.com/items?itemName=vs-publisher-1448185.ConveyorbyKeyoti,它可以在不进行任何配置更改的情况下轻松运行。 - Jim W says reinstate Monica
10个回答

143

更新

我制作了一个视频,更好地描述了这个过程:https://youtu.be/5ZqDuvTqQVs

如果你正在使用Visual Studio 2013或更高版本,请确保以管理员身份运行它才能使它工作。


打开%USERPROFILE%\My Documents\IISExpress\config\applicationhost.config文件(在VS2015中可能是$(solutionDir)\.vs\config\applicationhost.config)。你应该会看到类似这样的内容:

<site name="WebSite1" id="1" serverAutoStart="true">
    <application path="/">
        <virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%\WebSite1" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:8080:localhost" />
    </bindings>
</site>

bindingInformation=":8080:localhost"更改为bindingInformation="*:8080:*"(端口号8080可能不同)。

注意: 如果不起作用,请尝试使用bindingInformation="*:8080:星号可以被删除。

然后确保您的防火墙允许该端口的入站连接。您可能需要重新启动系统或至少重启Visual Studio以使IISExpress重新加载配置文件。

如果这样不起作用,请参阅此答案:https://dev59.com/VW445IYBdhLWcg3wws4u#5186680


31
这个解决方案对我没用。在VS2013中,修改了bindingInformation属性后,当我打开IDE并加载项目时,它会创建一个新的条目(即<site name="Website1(1)" id="2" serverAutoStart="true">),但我仍无法从另一台计算机访问该网站。 - Yván Ecarri
5
这个方法适用于我在VS2013中的操作:http://gilesey.wordpress.com/2013/04/21/allowing-remote-access-to-your-iis-express-service - Jay Cummins
11
对我有用。主要的调整是以管理员身份运行Visual Studio。 - Tanmay Mandal
21
我不知道为什么似乎只有我遇到了这个问题,但是 bindingInformation="*:8080:*" 对我没有起作用,结果出现了 @Y.Ecarri 经历的问题。最终有效的方法是去掉星号:bindingInformation=":8080:"。这让我非常疯狂,希望能帮助到其他人。 - Drazen Bjelovuk
6
与 Drazen 相同,必须使用管理员模式 + bindingInformation=":8080:"(不带 *) - Matthieu Charbonnier
显示剩余15条评论

48

VisualStudio 2015 非管理员

  1. 在解决方案目录中,打开文件.vs\config\applicationHost.config,将以下行

    <binding protocol="http" bindingInformation="*:44302:localhost" />

    更改为

    <binding protocol="http" bindingInformation=":44302:" />

    (其中44302为端口号)


  1. 使用管理员身份打开命令提示符:

    i. 允许非管理员绑定端口

    netsh http add urlacl url=http://*:44302/ user=Everyone

    ii. 允许通过防火墙

    netsh advfirewall firewall add rule name="IISExpress visualstudio app" protocol=tcp localport=44302 dir=in action=allow


  1. 从VisualStudio开始调试。

请注意,在 Windows 10 上,.vs 文件夹是隐藏的。显示隐藏文件以查看它。 - bhathiya-perera
哦!你是我的英雄!终于!关键是 .vs 文件夹的配置。无法感谢你! - twsmale
请注意,如@ArunPrasadES所提到的,如果遇到错误,请以管理员身份运行VS。 - Elmer
@Elmer 在一般情况下,用管理员身份运行IDE并调试程序是不好的做法(有一些例外情况)。最重要的是,在开发过程中,它掩盖了权限问题(当它们很容易被修复时),最终使您的程序(不必要地)需要以管理员身份运行-例如在管理员专用位置保存文件等。更好的方法是解决IDE和/或操作系统/用户权限的问题。 - gregmac
@gregmac 对于我之前的不当评论,我很抱歉。我的意思是,如果我更改绑定选项而不以管理员身份运行VS,则我的IIS会出现问题,会出现一些进程错误ID,我认为这可能与Windows 10的权限有关,因为我有一个全新的Windows 10安装和一个新的VS 2019安装。至于其他方面,我完全同意你的观点。 - Elmer

22

除了修改iisexpress配置文件之外,有时您还需要运行以下命令。

netsh http add urlacl url=http://*:49419/ user=Everyone


该命令可为网址添加访问控制列表(ACL),允许所有用户访问指定端口的网站。

49419端口有什么用?那只是一个示例端口,也可以是8080吗? - oligofren
回答自己的问题:是的,它是应用程序正在运行的端口。如果您使用此答案,则不再需要将Visual Studio作为管理员运行。 - oligofren
1
请您能否简要解释一下它的工作原理? - Shishir Gupta

15

如何避免以管理员身份运行Visual Studio

通过使用Garret的答案@shangkeyun的答案,您可以连接到正在运行的网站,而无需以管理员用户身份运行Visual Studio:

  1. 打开%USERPROFILE%\我的文档\IISExpress\config\applicationhost.config
  2. 使用name=MySiteName搜索您的网站
  3. <bindings>节中复制现有的<binding>项。现在应该有两行binding
  4. 删除bindingInformation中的"localhost"部分。
  5. 如果端口是12345,则现在应该看起来像这样:

    <binding protocol="http" bindingInformation="*:12345:localhost" />
    <binding protocol="http" bindingInformation="*:12345:" />
    
  6. 允许非管理员绑定端口

  7. netsh http add urlacl url=http://*:12345/ user=Everyone
    

编辑于2019年:gregmac添加了一步骤,以将VS实例列入白名单。我从未需要过这个步骤,但还是把它列出来:

  1. netsh advfirewall firewall add rule name="IISExpress visualstudio app" protocol=tcp localport=12345 dir=in action=allow

7
添加netsh命令后,错误变为“服务不可用”。 - tofutim
@tofutim 我也一样,请问你找到解决方案了吗? - frostymarvelous
你之后重新启动了Visual Studio吗? - oligofren
嗨,我刚刚注意到在与前面的行结合使用时,netsh命令是不正确的。我在上面使用了12345作为端口,但在netsh命令中使用了49419作为示例端口。这已经在我的更新中得到修复。 - oligofren

10

由于我无法在@Garret Fogerlie的帖子中添加评论,并针对评论者的问题(@Y.Ecarri和@SamuelEdwinWard),我按照Garret的建议使用Visual Studio 2013以管理员模式运行它,并更改了application.config文件。

在启动调试并看到我收到相同错误消息后,我回到了application.config,发现为我的站点创建了一个新条目,就像Y.Ecarri的问题一样。

因此,我停止了调试,保持我的解决方案在Visual Studio中打开,并再次编辑了新条目的application.config文件。 我还简单地删除了*符号和localhost,所以我为新条目拥有以下内容:

<binding protocol="https" bindingInformation=":44300:" />


这是唯一有效的解决方案!谢谢。 - code5

2

有些人可能会花费很多时间来修改和测试他们的 %USERPROFILE% 目录。如果您正在运行 VS debug,请使用 $(solutionDir).vs\config\applicationhost.config。


1
感谢byteit:
前往Documents/IISExpress/config中的applicationhost.config文件。
找到您正在处理的特定站点的条目:
添加:
<binding protocol="http" bindingInformation="*:<your site port>:*" />

在现有的前面。
 <binding protocol="http" bindingInformation="*:<your site port>:localhost" />

为了在重新启动时,避免VS2013为您创建新的网站XML条目而实现解决方案。您需要以管理员身份运行。

1
在进行上述配置后,我必须以管理员模式运行Visual Studio。

enter image description here


0

在使用Visual Studio Code进行调试时,我遇到了非常相似的问题,解决方法是添加以下内容:

"env": {
      // ...
      "ASPNETCORE_URLS": "http://*:5000" // change to the port you are using
      // ...
},

.. 到 launch.json

默认情况下,它将http协议绑定到“localhost:5000”,因此它可以在本地使用localhost,但不能使用IP地址 - 无论是远程还是本地。

如果您正在尝试通过来自另一台计算机的请求触发断点,请不要忘记检查防火墙设置(和/或杀毒软件)

希望这可以帮到你


0

这是对我有效的方法:

  • 启动IIS管理器
  • 添加一个新的虚拟目录,指向项目文件夹(在我的情况下是C:\VSProjects
  • 在IIS管理器中选择新的虚拟目录。从选项列表中选择目录浏览。右侧有一个启用按钮。点击它。

现在我可以通过mypcname\VSProjects\myProj\outputBinViewer访问我的文件夹和项目bin文件。


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