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

时间:2010-07-22 21:23:53

标签: c# asp.net iis-express

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

26 个答案:

答案 0 :(得分:382)

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)

答案 1 :(得分:335)

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

  1. 告诉IIS Express本身绑定到所有IP地址和主机名。在.config文件中。典型:
    • VS 2015: $(solutionDir)\.vs\config\applicationhost.config
    • < VS 2015:%userprofile%\My Documents\IISExpress\config\applicationhost.config
  2. 找到您网站的绑定元素,然后添加

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

      everyone是一个Windows组。对具有“Tout le monde”等空格的组使用双引号。

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

          

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

             

        计划%ProgramFiles%\IIS Express\iisexpress.exe
          或端口8080 TCP

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

          

        成功注册网址“http:// *:8080 /”,用于网站“hello world”应用程序“/”

答案 2 :(得分:116)

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

这就是为什么我专门针对这种情况编写了一个简单的代理实用程序: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

大部分时间更简单,更好。

答案 3 :(得分:102)

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

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

npm install -g iisexpress-proxy

然后

iisexpress-proxy 51123 to 81

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

修改:我目前正在使用ngrok

答案 4 :(得分:33)

Scott Hanselman提供了一个很好的资源Working with SSL at Development Time is easier with IISExpress

您所追求的是让IIS Express通过端口80向外部提供

部分

答案 5 :(得分:31)

作为旁注:

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

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

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

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

答案 6 :(得分:27)

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

  1. 在Windows命令行中获取主机IP地址:ipconfig
  2. GoTo

    $(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. 如果您尝试从远程
  7. 连接,可能会查找一些防火墙问题

答案 7 :(得分:17)

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

enter image description here

传送带允许您通过网络上的外部平板电脑和手机或Android模拟器测试网络应用程序(不使用http://10.0.2.2:<hostport>

步骤如下:

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

答案 8 :(得分:10)

如果您已尝试Colonel Panic's answer但在Visual Studio中无效,请尝试以下操作:

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

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

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

答案 9 :(得分:7)

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

第一步是将您的应用程序绑定到您的内部IP地址。运行cmd - &gt; 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未以管理员身份运行,则可能会失败。现在一切都应该有效。

enter image description here

答案 10 :(得分:7)

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

IISExpress configuration

答案 11 :(得分:5)

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

我刚刚按照步骤3&amp; 4(以管理员身份运行IIS Express)并且必须暂时禁用我的防火墙以使其正常工作。

答案 12 :(得分:5)

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

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

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

以下是我的工作方式 - http://programmingflow.com/2017/02/25/iis-express-on-external-ip.html

希望它有所帮助。

答案 13 :(得分:3)

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

enter image description here

答案 14 :(得分:3)

我在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(入站规则)中的请求
  6. 它正在运作!

答案 15 :(得分: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进行开发(然后允许远程连接),但反过来您必须始终以管理员身份运行...我不喜欢这样。

答案 16 :(得分:2)

如果从Admin运行Visual Studio,则只需添加

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

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

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

答案 17 :(得分:2)

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

https://ngrok.com/

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

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

ngrok authtoken xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

ngrok http -host-header=localhost 89230

假设89230是您的IIS Express端口

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

答案 18 :(得分:1)

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

enter image description here

希望有帮助。

答案 19 :(得分:1)

对于我来说,使用此方法相对简单且直接:

通过在扩展对话框中搜索“传送带”,

下载 Visual Studio扩展。然后安装。

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

答案 20 :(得分:1)

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

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

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

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

  4. 在此配置文件中找到您的Web服务(例如搜索您的端口),然后找到这样的一行: * 您的端口 :本地主机

  5. 在这之后添加新行:

    : 您的港口 *

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

我希望这可以帮助某个人。

答案 21 :(得分:0)

I solved this problem by using reverse proxy approach.

I installed wamp server and used simple reverse proxy feature of apache web server.

I added a new port to listen to Apache web server (8081). Then I added proxy configuration as virtualhost for that port.

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

答案 22 :(得分:0)

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

1)将IIS express配置绑定从本地主机更改为&#39; *&#39;

绑定协议=&#34; http&#34; bindingInformation =&#34; *:8888:*&#34;

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

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

答案 23 :(得分: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是&#34; Thumbprint&#34;您可以从MMC的证书属性中获取。

答案 24 :(得分:0)

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

答案 25 :(得分:-1)

[项目属性对话框]

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

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

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

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

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

上述解决方案的缺点:

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

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