¿Cómo habilitar la solicitud externa en IIS Express?

466

¿Cómo puedo habilitar solicitudes remotas en IIS Express? Scott Guthrie escribió que es posible pero no dijo cómo.

TedTel
fuente
25
Hay una extensión VS gratuita para esto que escribimos visualstudiogallery.msdn.microsoft.com/…
Jim W dice que reinstale a Monica el
@ Jim Jim, ¿eres el creador del complemento? ¿Podría explicar cómo funciona este milagro de la ingeniería de software?
Ian Warburton
@IanWarburton gracias por llamarlo un milagro! Es un servidor proxy inverso.
Jim W dice que reinstale a Monica el
@ Jimim Gracias por crearlo.
Ian Warburton el
@JimW Probé tu complemento y hago todo lo que dijiste en el tutorial. Pero todavía no puedo
acceder a

Respuestas:

403

Ahora hay una publicación de blog en el sitio del equipo de IIS que explica cómo habilitar las conexiones remotas en IIS Express . Aquí está la parte pertinente de esa publicación resumida:

En Vista y Win7, ejecute el siguiente comando desde un indicador administrativo:

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

Para XP, primero instale las herramientas de soporte de Windows XP Service Pack 2. Luego ejecute el siguiente comando desde un indicador administrativo:

httpcfg set urlacl /u http://vaidesg1:8080/ /a D:(A;;GX;;;WD)

Damian Edwards
fuente
121
En caso de un error 503, vea esto: stackoverflow.com/questions/5442551/…
deerchao
55
¿Hay un netshcomando para permitir conexiones en cualquier nombre de host?
Coronel Panic
33
Solo para el registro, en caso de que tenga una máquina Windows en un idioma que no sea inglés, el parámetro user={PARAM_USER}estará en su propio idioma.
GoRoS
77
El uso de comodines en el parámetro url (por ejemplo, url = http: // *: 8080 /) hará que las conexiones funcionen tanto para el nombre de host como para la dirección IP de la computadora.
Anders
2
En caso de que el comando falle (probablemente el error 1789) tenga en cuenta que el comando espera para el usuario en el idioma de su PC. Entonces, si su PC está en portugués, por ejemplo, use en user=todoslugar de user=everyone.
Vitor Canova
350

Hay tres cambios que puede necesitar hacer.

  1. Dígale a IIS Express que se una a todas las direcciones IP y nombres de host. En tu .configarchivo. Típicamente:
    • VS 2015: $(solutionDir)\.vs\config\applicationhost.config
    • <VS 2015: %userprofile%\My Documents\IISExpress\config\applicationhost.config

Encuentre el elemento de enlace de su sitio y agregue

    <binding protocol="http" bindingInformation="*:8080:*" />
  1. Configure el bit de Windows llamado 'http.sys'. Como administrador, ejecute el comando:
    netsh http add urlacl url=http://*:8080/ user=everyone

¿Dónde everyoneestá un grupo de Windows? Use comillas dobles para grupos con espacios como "Tout le monde".

  1. Permitir IIS Express a través del firewall de Windows.

    Inicio / Firewall de Windows con seguridad avanzada / Reglas de entrada / Nueva regla ...

    Programar %ProgramFiles%\IIS Express\iisexpress.exe
    O Puerto 8080 TCP

Ahora, cuando comience iisexpress.exe, debería ver un mensaje como

URL registrada correctamente "http: // *: 8080 /" para la aplicación "hello world" del sitio / / "

Coronel Panic
fuente
22
Nota: Si está ejecutando una versión localizada de Windows el parámetro users=everyonede netsh(segundo paso) puede causar un error 1789. Solución es traducir everyoneal nombre del grupo correspondiente en su idioma.
mflodin
55
¿Cómo se consigue un proyecto de Visual Studio para aceptar ese enlace? En las propiedades del proyecto, donde especificas Project Url, si ingreso un asterisco para el nombre de host, da un error. Si ingreso algo más, intenta crear un nuevo directorio virtual. No se vincula a la entrada en application.config.
Trevor Elliott
20
Para que funcione en Visual Studio, debe usar el nombre de host de su computadora en el paso 1 bindingInformation="*:8080:hostname"y en el paso 2 url=http://hostname:8080/, y en las propiedades de su proyecto web de Visual Studio en la pestaña Web configure la URL del proyecto en http://hostname:8080/. Elimine el *urlacl si ya creó uno; no funcionará si tienes ambos. Finalmente, la URL a la que va en su navegador web debe hacer referencia al nombre de host, no localhost.
Joe Daley
55
También tenía que tener una línea localhost en el elemento de enlaces, de lo contrario, Visual Studio 2013 intentó crear una entrada de sitio duplicada. por ejemplo:<binding protocol="http" bindingInformation="*:8080:localhost" />
kristianp
3
También necesitaba ejecutar Visual Studio como administrador, pero esta respuesta fue la más completa.
dlsso
127

Recuerdo haber tenido los mismos problemas al intentar este flujo de trabajo hace unos meses.

Es por eso que escribí una utilidad proxy simple específicamente para este tipo de escenario: https://github.com/icflorescu/iisexpress-proxy .

Al usar el Proxy IIS Express , todo se vuelve bastante simple: no es necesario "netsh http add urlacl url = vaidesg: 8080 / user = everyone" o estropear su "applicationhost.config".

Solo emita esto en el símbolo del sistema:

iisexpress-proxy 8080 to 3000

... y luego puede apuntar sus dispositivos remotos a http: // vaidesg: 3000 .

La mayoría de las veces más simple ES mejor.

Ionut-Cristian Florescu
fuente
3
¡Gracias por la gran solución!
Horario de verano
1
Y podría agregar que las soluciones de Node.js como esta son las únicas que funcionan de manera confiable sobre Azure, ya que las compilaciones de Azure generan automáticamente el archivo applicationhost.config y borran los cambios de enlace.
TheHansinator
1
Comencé a usar IIS Express Proxy en mi Mac junto con ngrok después de que ngrok no funcionó como se esperaba (porque no había hecho la manipulación de configuración de IIS Express necesaria). ¡Muy útil! Gracias.
codingoutloud
1
Esta es, con mucho, la solución más fácil. Prefiero no meterme con la aplicación host.config si no tengo que hacerlo.
skalpin
44
Excelente solucion! Ahora para regresar y deshacer el desorden que hice de mi IIS Express.
Mitch Stewart
123

Nada funcionó para mí hasta que encontré iisexpress-proxy .

Abra el símbolo del sistema como administrador, luego ejecute

npm install -g iisexpress-proxy

entonces

iisexpress-proxy 51123 to 81

asumiendo que su proyecto de Visual Studio se abre en localhost: 51123 y desea acceder a una dirección IP externa xxxx: 81

Editar: actualmente estoy usando ngrok

Kit de herramientas
fuente
77
solución indolora
bahadir
44
La solución más fácil que pude encontrar. Probablemente debería cambiar el nombre del paquete a algo así como proxy web, ya que puede usarlo para más que reenviar iisexpress :)
Mario Tacke
8
@xgp - Hola, soy el autor de iisexpress-proxy :-) ¿Al final has logrado que funcione para ti? Debe cerrar y volver a abrir el símbolo del sistema o, en casos excepcionales, reinicie el sistema operativo. Envíenme una línea en la página del proyecto ( github.com/icflorescu/iisexpress-proxy ) si tiene más preguntas e intentaré ayudarlo si tengo tiempo.
Ionut-Cristian Florescu
1
Gracias a todos por usarlo y por sus amables palabras :-). @MarioTacke - sí, lo sé, pero más personas pueden encontrarlo simplemente googleando si se llama iisexpress-proxy :-)
Ionut-Cristian Florescu
1
Por cierto, esto no funciona con la autenticación de Windows.
Tom
35

Como nota al margen de esto:

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

Esto solo funcionará en versiones en inglés de Windows. Si está utilizando una versión localizada, debe reemplazar "todos" por otra cosa, por ejemplo:

  • "Iedereen" cuando se usa una versión holandesa
  • "Jeder" cuando se usa una versión alemana
  • "Mindenki" cuando se usa una versión húngara

De lo contrario, recibirá un error (Error al crear SDDL, Error: 1332)

Breez
fuente
33

Un buen recurso es trabajar con SSL en tiempo de desarrollo, es más fácil con IISExpress de Scott Hanselman.

Lo que busca es la sección Obtener IIS Express para servir externamente a través del Puerto 80

Luke Sampson
fuente
Esta publicación de blog recomienda aislar el puerto 80 a "IISExpressWeb.exe". La versión actual de IIS Express carece de un exe de este nombre: solo hay IISExpress.exe e IISExpressTray.exe. Aislar las conexiones a cualquiera evita una conexión desde el exterior; eliminar la restricción del proceso permite conexiones. ¿Cuál es el .exe adecuado para apuntar?
Chris Moschini
33

Si está trabajando con Visual Studio, siga estos pasos para acceder a IIS-Express a través de la dirección IP:

  1. Obtenga su dirección IP de host: ipconfigen la línea de comandos de Windows
  2. Ir

    $(SolutionDir)\.vs\config\applicationHost.config
  3. Encontrar

    <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. Añadir: <binding protocol="http" bindingInformation="*:62549:192.168.178.108"/>
    con su dirección IP

  5. Ejecute su Visual Studio con derechos de administrador y todo debería funcionar
  6. Tal vez busque algunos problemas de firewall si intenta conectarse desde un control remoto
Daniel Eisenreich
fuente
20

Lo resolví con la instalación de "Conveyor by Keyoti" en Visual Studio Professional 2015. El transportador genera una dirección REMOTA (su IP) con un puerto (45455) que permite la solicitud externa. Ejemplo:

ingrese la descripción de la imagen aquí

Conveyor le permite probar aplicaciones web desde tabletas y teléfonos externos en su red o desde emuladores de Android (sin http://10.0.2.2:<hostport>)

Los pasos están en el siguiente enlace:

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

Ronny Morán
fuente
@kilianeller por favor siga el enlace en la respuesta y haga una pregunta allí, podemos ayudarlo.
Jim W dice que reinstale a Monica el
¡Workst!, Pruebo todas las otras soluciones (cambio applicationhost.config, netsh, dirección IPv6 ...) y nada, pero instalar esto finalmente funciona, el único pequeño problema fue que la dirección IP fue mal dirigida, pero no fue un problema grave.
Ion
Muy fácil de instalar. Solo asegúrese de agregar el certificado en su navegador remoto como se indica en la página de la extensión.
Andrés
No puedo creerlo, ¡funciona! ¡TAN SIMPLE, TAN ELEGANTE! ¡Pasé las últimas 5 horas solo para buscar soluciones vacías y finalmente encontré esto!
Ziggy192
10

Si ha probado la respuesta del Coronel Panic pero no funciona en Visual Studio, intente esto:

Agregue otro <binding />en su configuración de IIS Express

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

Finalmente, debe ejecutar Visual Studio como administrador

Bruce
fuente
Desafortunadamente, eso no parece funcionar para mí. Todavía recibo una conexión denegada cuando intento acceder a mi ip local en el puerto 8080
Thomas Teilmann
@ThomasTeilmann, en Visual Studio, tuve que abrir las propiedades de la aplicación web y, en la pestaña Web, cambiar "Project Url" para usar el nombre de host alternativo en lugar de localhost.
Sam
@ThomasTeilmann, Ah, y creo que debe buscarlo por nombre de host en lugar de IP.
Sam
Intenté ambas cosas también, en realidad, y no funcionó para la instancia de la nube: / Gracias, aunque
Thomas Teilmann, el
Esta fue la respuesta para mí (es decir, ejecutar VS como administrador): gracias @Bruce. Además, también tuve que corregir manualmente la configuración de mi firewall. En mi caso (es decir, probar que mi iPhone puede explorar mi máquina de desarrollo), abrir el puerto 8080 en el firewall no funcionó (¿eh?) Pero abrir el acceso por IP (es decir, Alcance> IP locales = 10.0.0.0/24 = mi casa red) hizo el truco.
Ilan
9

Lo que me ayudó fue hacer clic derecho en el ícono 'IISExpress', 'Mostrar todas las aplicaciones'. Luego seleccioné el sitio web y vi qué aplicationhost.config usa, y la corrección fue perfecta.

Configuración IISExpress

Emmanuel
fuente
2
Esta respuesta me apuntó a otra solución, editando applicationhost.config para aceptar : 55665: en lugar de *: 55665: localhost
Deko
Gracias @Deko: su comentario, junto con el comando netsh mencionado en algunas otras respuestas, lo hizo funcionar para mí.
Marcel Popescu
8

Esto es lo que hice para Windows 10 con Visual Studio 2015 para habilitar el acceso remoto, tanto con http como con https:

El primer paso es vincular su aplicación a su dirección IP interna. Ejecute cmd-> ipconfigpara obtener la dirección. Abra el archivo /{project folder}/.vs/config/applicationhost.configy desplácese hacia abajo hasta encontrar algo como esto:

<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>

Agregue dos enlaces nuevos debajo bindings. También puede usar HTTPS si desea:

<binding protocol="http" bindingInformation="*:12345:192.168.1.15" />
<binding protocol="https" bindingInformation="*:44300:192.168.1.15" />

Agregue la siguiente regla a su firewall, abra una nueva cmdsolicitud como administrador y ejecute los siguientes comandos:

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

Ahora inicie Visual Studio como Administrator. Haga clic derecho en el archivo de proyecto de proyectos web y seleccione Properties. Vaya a la Webpestaña y haga clic Create Virtual Directory. Si Visual Studio no se ejecuta como administrador, esto probablemente fallará. Ahora todo debería funcionar.

ingrese la descripción de la imagen aquí

Ogglas
fuente
¡Trabajó para mi! :) También hay una buena publicación aquí: blog.kloud.com.au/2017/02/27/…
Leniel Maccaferri
Intenté todo lo demás, incluido ngrok, pero fue en vano. Esto funcionó en el primer intento.
kooldave98
5

La respuesta aceptada a esta pregunta es una guía para que IIS Express funcione con webmatrix. Encontré esta guía más útil al intentar que funcione con VS 2010.

Simplemente seguí los pasos 3 y 4 (ejecutando IIS Express como administrador) y tuve que desactivar temporalmente mi firewall para que funcionara.

Chad
fuente
Las instrucciones que vincula para perder la capacidad de depurar desde Visual Studio, que al menos en mi opinión lo hace inútil: usar IIS o cualquier otro servidor remoto sería tan bueno o mejor (porque al menos podría configurar la depuración remota en IIS). Si IIS Express no requiere privilegios de administrador para ejecutarse sin localhost, esto simplemente funcionaría. Muy molesto.
Chris Moschini
Esto es exactamente lo que estaba buscando, ¡gracias! Estoy usando IIS Express con Visual Studio 2010 e iba a probar una aplicación ASP.NET MVC3 en mi LAN, y esto era lo que necesitaba para que funcionara :)
Lasse Christiansen
5

Puede intentar configurar el reenvío de puertos en lugar de intentar modificar su configuración de IIS Express, agregar nuevas reglas HTTP.sys o ejecutar Visual Studio como administrador.

Básicamente, debe reenviar la ejecución de IP:PORTsu sitio web a algún otro puerto libre en su máquina pero en el adaptador de red externo, no localhost.

Lo que pasa es que IIS Express (al menos en Windows 10) se une a [::1]:portlo que significa que escucha en el puerto IPv6. Tienes que tener esto en cuenta.

Así es como hice este trabajo: http://programmingflow.com/2017/02/25/iis-express-on-external-ip.html

Espero eso ayude.

srmrco
fuente
Estoy ejecutando Windows 10 y la clave fue vincular localhost a IPv6. ¡Gracias!
TomaszGuzialek
La computadora que estaba tratando de configurar tenía otra dirección local. Fue nombrado "local-dev". Tuve que vincular agregar v4tov6 listenport = 3000 connectaddress = local-dev connectport = 60000 para que funcione. Gran post, gracias!
Anika
4

La forma más simple y genial que encontré fue usar (la configuración tarda 2 minutos):

https://ngrok.com/

Funcionará con cualquier cosa que se ejecute en localhost. Simplemente regístrese, ejecute poco ejecutable y todo lo que ejecute en localhost obtiene una URL pública a la que puede acceder desde cualquier lugar.

Esto es bueno para mostrar cosas a sus compañeros de equipo remotos, sin jugar con la configuración de IIS o los firewalls. Desea detener el acceso simplemente terminar ejecutable.

ngrok authtoken xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

ngrok http -host-header=localhost 89230

asumiendo que 89230 es su puerto IIS Express

También puede ejecutar múltiples puertos incluso en plan gratuito

Artur Kędzior
fuente
1
¿Quién pensaría que tendré que leer tantas respuestas hasta que encuentre una solución ...
alexkovelsky
3

Tengo algunos problemas al usar IIS Express en Win 8.1 y solicitud externa.

Sigo estos pasos para depurar la solicitud externa:

  1. Instalar IIS
  2. Configure Visual Studio para usar IIS local (propiedades de página en su proyecto web)
  3. Crear un AppPool exclusivo en IIS para trabajar con mi aplicación
  4. En mi proyecto, uso Oracle Client y debo tener 32 bits (64 bits no funcionan con Visual Studio), entonces necesito permitir 32 bits en el grupo de aplicaciones
  5. Configure el firewall de Windows para permitir la solicitud en el puerto 80 (reglas de entrada)

¡Esta funcionando!

Robson Douglas
fuente
2

Si ejecuta Visual Studio desde Admin, puede agregar solo

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

o

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

dentro

%userprofile%\My Documents\IISExpress\config\applicationhost.config
Andrii
fuente
1
Apliqué esta configuración $(SolutionDir).vs\config\applicationHost.configy también tuve que abrir el puerto (8443) de la aplicación en el firewall de Windows.
Tonatio
2

Tenía un IIS local habilitado, así que acabo de crear una regla de reescritura en mi puerto de depuración ... Creo que esto es mejor y más genial que otro método porque es más fácil de eliminar una vez que termine de desarrollar ... Así es como se ve la reescritura. .

<rewrite>
    <rules>
        <rule name="ReverseProxyInboundRule1" stopProcessing="true">
            <match url="^dev/(.*)" />
            <action type="Rewrite" url="http://localhost:47039/{R:1}" />
        </rule>
    </rules>
</rewrite>

VS también le permite desarrollar utilizando su IIS local directamente (que luego permite conexiones remotas), pero a su vez siempre debe ejecutarlo como administrador ... No me gusta eso.

konzo
fuente
Esta es mi solución favorita también, gracias :) Solo tenía que habilitar el proxy inverso para mi IIS primero, luego agregar esta regla a mi web.config.
Mahdi Ghiasi
1

Resolví este problema usando el enfoque de proxy inverso.

Instalé el servidor wamp y utilicé la función de proxy inverso simple del servidor web apache.

Agregué un nuevo puerto para escuchar el servidor web Apache (8081). Luego agregué la configuración de proxy como virtualhost para ese puerto.

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

Hice todos estos pasos y nada me ayudó. Y lo que necesito, es solo ejecutar mi aplicación a través de IIS Express ...

ingrese la descripción de la imagen aquí

Espero eso ayude.

Maksym Labutin
fuente
0

No pude atender sus solicitudes a otros usuarios en mi red local, todo lo que tuve que hacer (además de lo anterior) fue reiniciar mi enrutador BT Hub.

Terry Kernan
fuente
0

Esto es increíblemente increíble e incluso cubre HTTPS con bonitos nombres de dominio:

http://www.hanselman.com/blog/WorkingWithSSLAtDevelopmentTimeIsEasierWithIISExpress.aspx

Las partes realmente increíbles que no pude encontrar en ningún otro lugar en SO en caso de que el enlace anterior desaparezca:

> 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/

¡La utilidad anterior registrará el certificado SSL por usted! Si usa la opción -UseSelfSigned, es súper fácil.

Si desea hacer las cosas de la manera difícil, la parte no obvia es que debe decirle a HTTP.SYS qué certificado usar, como este:

netsh http add sslcert ipport=0.0.0.0:443 appid={214124cd-d05b-4309-9af9-9caa44b2b74a} certhash=YOURCERTHASHHERE

Certhash es la "huella digital" que puede obtener de las propiedades del certificado en MMC.

eselk
fuente
0

Hice lo siguiente y pude conectarme:

1) cambió el enlace de configuración expresa de IIS del host local a '*'

protocolo de enlace = "http" bindingInformation = "*: 8888: *"

2) Regla de entrada definida en el firewall para permitir el puerto particular para el tipo de protocolo: tcp

3) Agregue el siguiente comando para agregar la configuración de red para su puerto: netsh http add urlacl url = http: // *: 8888 / user = everyone

dhakalan
fuente
Dado que está llegando a esta pregunta 6 años después de haberla formulado, y ya hay otras 12 respuestas, sería mejor si editara su respuesta para explicar cómo funciona mejor que las otras 12 (o al menos cómo funciona). es diferente).
Heretic Monkey
0

Otra forma de acceder a solicitudes externas es usar IIS en lugar de IIS Express. En mi estudio visual, puedo cambiar fácilmente.

ingrese la descripción de la imagen aquí

PJ3
fuente
Estoy usando VS2019.
PJ3
-1

[diálogo de propiedades del proyecto]

Para el desarrollo con VisualStudio 2017 y un proyecto API NetCore:

1) En Cmd-Box: ipconfig / all para determinar la dirección IP

2a) Ingrese la dirección IP recuperada en Propiedades del proyecto-> Pestaña Depurar

2b) Seleccione un puerto y conéctelo a la dirección IP del paso 2a.

3) Agregue una regla de permiso en el firewall para permitir el tráfico TCP entrante en el puerto seleccionado (mi firewall se activó con un cuadro de diálogo: "Bloquear o agregar una regla al firewall"). Agregar en ese caso hará el truco.

Desventaja de la solución anterior:

1) Si utiliza una dirección IP dinámica, debe volver a realizar los pasos anteriores en caso de que se haya asignado otra dirección IP.

2) Su servidor ahora tiene un puerto abierto que puede olvidar, pero este puerto abierto sigue siendo una invitación para invitados no deseados.

Paul Franke
fuente