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


84

我有一个在VS2012中开发的测试ASP.NET MVC3应用程序。当我开始调试时,可以通过请求从主机访问该应用http://localhost:<portnumber>。但是,如果我尝试通过http://<ip>:<portnumber>I从Intranet中的远程计算机访问相同的应用程序,则说明HTTP error 400: Bad request. Invalid Host Name.它在IIS Express上运行,因此无法访问任何服务器配置。

有什么办法解决这个问题吗?


使用我们的免费扩展程序Conveyor来进行marketplace.visualstudio.com/…,它无需更改任何配置即可轻松运行。
吉姆W说恢复莫妮卡

Answers:


138

更新资料

我制作了一段视频,更好地描述了这一过程,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 : //stackoverflow.com/a/5186680/985284


30
此解决方案对我不起作用。在VS2013中,修改bindingInformation属性后,当我打开IDE并加载项目时,它会创建一个新条目(即<site name="Website1(1)" id="2" serverAutoStart="true">,我仍然无法从其他计算机访问该网站。)
YvánEcarri 2013年

5
这在VS2013中为我工作: gilesey.wordpress.com/2013/04/21/…–
Jay Cummins

10
为我工作。主要调整是以管理员身份运行Visual Studio。
Tanmay Mandal

20
我不知道为什么我似乎是唯一遇到此问题的人,但bindingInformation="*:8080:*"对我没有用,并导致了@ Y.Ecarri遇到问题。最终工作的是删除星号:bindingInformation=":8080:"。男孩这样做使我发疯,希望它能帮助到某人。
Drazen Bjelovuk 2014年

5
与Drazen一样,必须使用Admin模式+ bindingInformation=":8080:"(不带*)
Matthieu Charbonnier15年

42

VisualStudio 2015非管理员

  1. 在您的解决方案目录中,在文件中.vs\config\applicationHost.config更改该行

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

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

    (其中44302是您的端口)


  1. 在管理员命令提示符下:

    一世。启用非管理员绑定到端口

    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开始调试

请注意,.vs文件夹在Windows 10上是隐藏的。显示隐藏文件以查看它。
bhathiya-perera

哦! 你是我的英雄!最后!关键是.vs文件夹的配置。感激不尽!
twsmale

请注意,如下面的@ArunPrasadES所述,如果遇到错误,请以管理员身份运行VS。
Elmer

@Elmer运行IDE并以admin身份调试程序通常是一个坏主意(只有少数例外)。最重要的是,它掩盖了开发过程中的权限问题(当它们很容易修复时),这最终使您的程序(不必要地)需要以admin身份运行-诸如将文件保存在仅admin的位置之类的事情。解决您的IDE和/或OS /用户权限的问题。
gregmac

@gregmac抱歉,我的意思是,如果我取消绑定选项并且不以管理员身份运行VS,则IIS出现问题,我认为这是进程错误ID,我认为这与Windows 10的权限有关,因为我拥有全新的Windows使用新的VS 2019安装进行10安装。至于其余的我同意你的100%
埃尔默

21

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

netsh http添加urlacl url = http:// *:49419 / user =每个人


49419端口有什么用?这仅仅是一个示例端口,可能还应该是8080?
oligofren

回答我自己的问题:是的,它是应用程序运行所在的端口。如果使用此答案,则不再需要以管理员身份运行Visual STudio。
oligofren '16

1
您能否简要说明其工作原理?
Shishir Gupta

12

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

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

  1. 打开 %USERPROFILE%\My Documents\IISExpress\config\applicationhost.config
  2. 使用搜索您的网站 name=MySiteName
  3. 复制<binding><bindings>部分中的现有项目。您现在应该有两行binding
  4. 删除bindingInformation中的“ localhost”部分。
  5. 现在假设端口为12345

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

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

EDIT 2019:gregmac添加了将VS实例列入白名单的步骤。我从不需要这个,但无论如何都要列出来:

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

6
添加netsh将错误更改为“服务不可用”
tofutim '16

@tofutim在这里一样。您找到解决方案了吗?
frostymarvelous

之后您是否重新启动了Visual Studio?
oligofren

嗨,我只是注意到与前几行结合使用时,netsh命令不正确。我在上面使用12345作为端口,但在netsh命令中使用了49419作为示例端口。我的更新中已修复此问题。
oligofren

10

由于我无法在@Garret Fogerlie的帖子中添加评论,并且无法响应评论者的问题(@ Y.Ecarri和@SamuelEdwinWard),因此,我按照Garret的建议,使用Visual Studio 2013,以Admin模式运行并更改了 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条目。您将需要以管理员身份运行。



0

这对我有用:

  • 启动IIS管理器
  • 添加一个指向项目文件夹的新虚拟目录(C:\VSProjects以我为例)
  • 在IIS管理器中选择新的虚拟目录。选择Directory Browsing从选项列表。在右侧有一个Enable按钮。点击它。

现在,我可以通过访问网络上的文件夹和项目容器mypcname\VSProjects\myProj\outputBinViewer


0

Visual Studio Code中调试时发生了非常相似的问题,我通过添加以下内容解决了该问题:

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

..到launch.json

显然,默认情况下,它将http协议绑定到“ localhost:5000”,因此它可与localhost一起使用,但不能与ip地址一起使用-既不是远程也不是本地的。

如果您试图通过来自另一台计算机的请求来达到断点,请不要忘记检查防火墙设置(和/或防病毒软件)

希望这可以帮助

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.