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

Ted*_*Tel 448 c# asp.net iis-express

如何在IIS Express中启用远程请求?斯科特格思里写道,这是可能的,但他没有说明如何.

Dam*_*rds 394

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)

  • 如果出现503错误,请参阅:http://stackoverflow.com/questions/5442551/iisexpress-returns-a-503-error-from-remote-machines (120认同)
  • 只是为了记录,如果您使用非英语语言的Windows机器,`user = {PARAM_USER}`的参数将使用您自己的语言. (32认同)
  • 请记住在命令行中更改URL. (10认同)
  • 在url-parameter中使用通配符(例如url = http://*:8080 /)将使连接适用于主机名和计算机的IP地址. (7认同)
  • 是否有`netsh`命令允许*any*hostname上的连接? (5认同)
  • 如果命令失败(可能是错误1789),请考虑该命令对您的PC语言用户的期望.因此,如果您的PC是葡萄牙语,请使用`user = todos`而不是`user = everyone`. (2认同)

Col*_*nic 342

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

  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:*" />
Run Code Online (Sandbox Code Playgroud)
  1. 设置名为"http.sys"的Windows位.作为管理员,请运行以下命令:
    netsh http add urlacl url=http://*:8080/ user=everyone
Run Code Online (Sandbox Code Playgroud)

everyoneWindows组在哪里.对于包含"Tout le monde"等空格的组,请使用双引号.

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

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

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

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

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

  • 注意如果您运行的是本地化版本的Windows,参数`users = everyone`为`netsh`(第二步)可能会导致错误1789.解决方法是将`everyone`翻译成您所用语言的相应组名. (22认同)
  • 要使它在Visual Studio中工作,必须在步骤1中使用计算机的主机名`bindingInformation ="*:8080:hostname"`并在步骤2中使用url = http:// hostname:8080 /`,并在Visual Studio中使用Web选项卡上的Web项目属性将Project Url设置为`http:// hostname:8080 /`.如果已经创建了一个,则删除`*`urlacl; 如果你有两个都行不通.最后,您在Web浏览器中访问的URL必须引用主机名,而不是localhost. (20认同)
  • 如何让Visual Studio项目接受该绑定?在项目属性中,您指定"Project Url",如果我为主机名输入星号,则会出现错误.如果我输入任何其他内容,它会尝试创建一个新的虚拟目录.它不链接到application.config中的条目. (5认同)
  • 我必须在bindings元素中有一个localhost行,否则visual studio 2013试图创建一个重复的站点条目.例如:`<binding protocol ="http"bindingInformation ="*:8080:localhost"/>` (5认同)
  • %userprofile%\ My Documents\IISExpress\config (4认同)
  • 我还需要以管理员身份运行Visual Studio,但这个答案是最彻底的. (3认同)
  • 很好的总结清单,谢谢!在 Win7 上,#1 和 #3 对我来说已经足够了。 (2认同)
  • 确保将其添加为第二个绑定而不是修改现有的绑定,否则VS将重新添加一个附加了"(1)"的新站点. (2认同)

Ion*_*scu 121

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

这就是为什么我专门针对这种情况编写了一个简单的代理实用程序: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认同)
  • 优秀解决方案 现在回过头来消除我用IIS Express制作的混乱局面. (3认同)

Too*_*kit 116

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

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

npm install -g iisexpress-proxy
Run Code Online (Sandbox Code Playgroud)

然后

iisexpress-proxy 51123 to 81
Run Code Online (Sandbox Code Playgroud)

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

编辑:我目前正在使用 ngrok

  • 无痛的解决方案 (6认同)
  • @xgp - 嗨,我是iisexpress-proxy的作者:-)你有没有设法让它最终适合你?您必须关闭并重新打开命令提示符,或者在极少数情况下重新启动操作系统.如果您有其他问题,请在项目页面(https://github.com/icflorescu/iisexpress-proxy)中给我留言,如果我有时间的话,我会尽力帮忙. (6认同)
  • 我能找到的最简单的解决方案.应该将软件包重命名为web-proxy之类的东西,因为你可以将它用于转发iisexpress :) (4认同)
  • 感谢大家使用它以及您的客气话:-)。@MarioTacke - 是的,我知道,但是如果它被称为 iisexpress-proxy,更多的人可以通过 google-ing 找到它:-) (2认同)

bre*_*eez 34

作为旁注:

netsh http add urlacl url=http://vaidesg:8080/ user=everyone
Run Code Online (Sandbox Code Playgroud)

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

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

否则您将收到错误(创建SDDL失败,错误:1332)


Luk*_*son 33

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

您所追求的是让IIS Express通过端口80从外部服务的部分


Dan*_*ich 31

如果您正在使用Visual Studio,请按照以下步骤访问IP-Adress上的IIS-Express:

  1. 获取您的主机IP地址:ipconfig在Windows命令行中
  2. $(SolutionDir)\.vs\config\applicationHost.config
    
    Run Code Online (Sandbox Code Playgroud)
  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>
    
    Run Code Online (Sandbox Code Playgroud)
  4. 添加: <binding protocol="http" bindingInformation="*:62549:192.168.178.108"/>
    使用您的IP地址

  5. 运行具有管理员权限的Visual Studio,一切都应该有效
  6. 如果您尝试从远程连接,可能会查找一些防火墙问题


小智 19

我在Visual Studio Professional 2015中安装了"Conveyor by Keyoti"解决了这个问题.传送带生成一个REMOTE地址(您的IP),其端口(45455)启用了外部请求.例:

在此输入图像描述

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

步骤如下:

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


Bru*_*uce 10

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

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

<bindings>
    <binding protocol="http" bindingInformation="*:8080:localhost" />
    <binding protocol="http" bindingInformation="*:8080:hostname" />
</bindings>
Run Code Online (Sandbox Code Playgroud)

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


Ogg*_*las 8

这就是我使用Visual Studio 2015为Windows 10启用的远程访问,包括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>
Run Code Online (Sandbox Code Playgroud)

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

<binding protocol="http" bindingInformation="*:12345:192.168.1.15" />
<binding protocol="https" bindingInformation="*:44300:192.168.1.15" />
Run Code Online (Sandbox Code Playgroud)

将以下规则添加到防火墙,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
Run Code Online (Sandbox Code Playgroud)

现在启动Visual Studio作为Administrator.右键单击Web项目项目文件并选择Properties.转到Web选项卡,然后单击Create Virtual Directory.如果Visual Studio未以管理员身份运行,则可能会失败.现在一切都应该有效.

在此输入图像描述


Emm*_*uel 7

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

IISExpress配置

  • 这个答案给我指出了另一个解决方案,编辑 applicationhost.config 以接受 *:55665:* 而不是 *:55665:localhost (2认同)

Art*_*ior 7

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

https://ngrok.com/

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

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

ngrok authtoken xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

ngrok http -host-header=localhost 89230
Run Code Online (Sandbox Code Playgroud)

假设 89230 是您的 IIS Express 端口

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

  • 伙计,我几乎放弃了 ngrok,因为我总是收到“Bas Request 400 Invalid hostname”。使用“-host-header”解决了这个问题。非常感谢! (2认同)

Mel*_*lOS 6

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

  1. 以管理员身份启动 Visual Studio 并像往常一样运行 Web 服务。

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

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

  4. 在此配置文件中找到您的 Web 服务(例如搜索您的端口),然后找到如下一行: *: yourport :localhost

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

    :你的端口*

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

我希望这可以帮助那里的人。


Cha*_*had 5

此问题的已接受答案是使IIS Express与webmatrix一起使用的指南.我发现本指南在尝试使用VS 2010时更有用.

我刚刚按照步骤3和4(以管理员身份运行IIS Express)而不得不暂时禁用防火墙以使其正常工作.


小智 5

您可以尝试设置端口转发,而不是试图修改IIS配置快递,添加新的HTTP.sys规则或运行Visual Studio作为一个管理员。

基本上你需要给转发IP:PORT您的网站运行在你的机器上的一些其他自由港,但外部网络适配器上,而不是本地主机。

问题是,IIS快递(至少在Windows 10)的结合[::1]:port意味着它侦听的IPv6端口。你需要考虑到这一点。

这里是我做这项工作- http://programmingflow.com/2017/02/25/iis-express-on-external-ip.html

希望能帮助到你。