Configurar IIS Express para acceso externo al proyecto VS2010

103

Estoy desarrollando un proyecto en VS2010 y puedo ver mi sitio localmente a través de IIS Express. Me gustaría habilitar el acceso externo a través de la red.

Toda mi investigación me ha enviado a esta entrada de blog: http://blogs.iis.net/vaidyg/archive/2010/07/29/serving-external-traffic-with-webmatrix-beta.aspx , que es útil pero no no parece mostrar cómo configurar enlaces para un proyecto iniciado en Visual Studio (no puedo encontrar la pantalla en las capturas de pantalla y he editado la información de enlace en applicationhost.config, pero no parece reflejarse cuando ejecuto el sitio desde estudio visual).

rechoncho
fuente
10
por favor lea la publicación del blog de Scott Hanselman hanselman.com/blog/…
balexandre
posible duplicado de la solicitud externa de habilitación
abatishchev

Respuestas:

136

1 Después de editar el archivo applicationhost.config (ubicado en la carpeta IISExpress en sus documentos), los enlaces de su sitio deberían verse como a continuación:

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

Los enlaces constan de tres partes. Primero una dirección IP o una lista, o como en este caso, un comodín. En segundo lugar, el número de puerto y, en tercer lugar, un nombre de host, una lista o un comodín (para filtrar por Hostencabezado). Para fines de desarrollo, un comodín es más adecuado aquí, ya que probablemente usará un puerto único.

2 Debido a que está utilizando un enlace de host no local, se requieren permisos adicionales. Puede ejecutar VS como administrador, o preferiblemente debe agregar URL ACL para otorgar los permisos necesarios. En el siguiente ejemplo, se otorga permiso a todos, pero puede usar su propio nombre de usuario.

Nota: El urlacldebe coincidir exactamente con la unión. Entonces, un urlaclfor http://*:8080permitirá un enlace de *:8080:*, pero no un enlace de *:8080:localhost, aunque el último sea un subconjunto del primero. esto significa que si, en lugar de usar un comodín, enumera los encabezados de host applicationhost.config, debe agregar una coincidencia urlaclpara cada uno.

Los pasos para configurar HTTP.sys para tráfico externo son similares a configurar un sitio para usar un puerto reservado. En Windows 7 o Windows Vista, desde un símbolo del sistema elevado, ejecute el siguiente comando:

netsh http add urlacl url=http://*:8080/ user=DOMAIN\username

En Windows XP, ejecute el siguiente comando desde un símbolo del sistema elevado:

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

Nota 2 Si ejecutar VS como administrador o agregar entradas de ACL no resuelve su problema, ejecute IIS Express desde la línea de comando y verifique si hay algún mensaje de error de registro vinculante. Para comenzar desde la línea de comando, dé este comando:

iisexpress.exe /site:"your-site-name"

3 Finalmente, necesitará las entradas de firewall adecuadas. Para ello, es más fácil utilizar la consola "Firewall de Windows con seguridad avanzada".

En "Reglas de entrada", elija "Nueva regla ...".

  • El tipo de regla es "Personalizado".
  • El programa es Servicios-> Personalizar ...-> Aplicar solo a servicios. (Aunque IIS Express no es un servicio, el multiplexor HTTP que utiliza sí lo es).
  • El protocolo es TCP
  • Puertos específicos: enumere todos los puertos para todos sus enlaces IIS Express. Puede volver a esta regla y agregar puertos en cualquier momento. (Si esto se vuelve aburrido, puede agregar un rango como el 40000-65534que cubre todo el rango usado por Visual Studio, pero tenga en cuenta que esto es menos seguro).
  • La acción es "Permitir la conexión"
  • El perfil será uno de los siguientes. En caso de duda, elija "Dominio + privado".
    • "Dominio", si el suyo es un escritorio corporativo y solo se ejecutará en el dominio local
    • "Dominio + Privado" Si la suya es una máquina de desarrollo privada en un entorno no corporativo, o una computadora portátil corporativa que también necesita funcionar cuando se trabaja desde casa.
    • "Dominio, Privado y Público", si necesita hacer demostraciones en redes no privadas.
  • El nombre debe ser similar a "IIS Express Dev Server"
vikomall
fuente
12
@ user578913 Así que finalmente encontré el archivo applicationhost.config correcto abriendo la barra de tareas de IIS Express en ejecución y haciendo clic en él y luego en el enlace al archivo de configuración. Configuré el puerto en 1063 en la segunda línea, ya que eso es lo que se estableció en la primera línea. Ejecutó su línea de comando y todo se veía bien. Cuando voy a machine-name o machine-name: 1063 desde otra máquina en la red, todavía no obtengo nada.
snumpy
15
ok, dado que Visual Studio asigna un puerto (que no sea 8080), el Firewall de Windows lo estaba bloqueando. Después de apagar el Firewall de Windows (podría decirse que podría simplemente abrir el puerto, pero estoy en una red segura) y usar la IP de mi máquina en lugar del nombre de la máquina, funcionó. Gracias. Votaría, pero todavía no tengo el representante = (
snumpy
3
Sí, si el Firewall de Windows debe estar activado, agregue explícitamente el puerto TCP 8080 (o el que use). En Windows 7, inicialmente intenté asignar un puerto a "IIS Express Worker Process". Pero no funcionó. Tuve que usar la opción "Nueva regla" y permitir el puerto 8080. La elección del perfil (Dominio, Privado, Público) también es importante.
Gautam Jain
2
Nota personal: si obtiene acceso denegado, ejecute Visual Studio como administrador .
nVentimiglia
3
A partir de VS2015, la ubicación del archivo es C:\<Path\To\Solution>\.vs\config\applicationhost.config. (Gracias, @Talon)
snumpy
29

También pasé horas en este problema, tratando de navegar desde mi Xoom Android a mi máquina de desarrollo win7, para poder probar una nueva aplicación web asp.net que creé. Todo lo que hice fue cambiar el applicationhost.config de IISExpress de usar el nombre de host de la PC a la dirección IP actual de la PC, para mi nuevo sitio.

<binding protocol="http" bindingInformation="*:80:dev-Lee" />

a

<binding protocol="http" bindingInformation="*:80:192.168.1.102" /> 

Una vez que hice esto y reinicié IISExpress ... ¡Pude navegar a mi máquina dev-Lee y ver mi aplicación desde mi Xoom!

leester39
fuente
10
Todo lo que obtengo con todas estas soluciones es un error 400 - Solicitud incorrecta. ¿Alguna sugerencia?
Krumelur
2
@Krumelur, asegúrese de editar el archivo applicationhost.config correcto. el de la carpeta Mis documentos.
Codler
14

Podemos agregar múltiples direcciones de enlace editando applicationhost.config de IIS Express

<bindings>
   <binding protocol="http" bindingInformation="*:62217:localhost" />
   <binding protocol="http" bindingInformation="*:62217:192.168.0.5" />
   <binding protocol="http" bindingInformation="*:62218:192.168.0.5" />
</bindings>

Ahora podemos acceder al sitio web desde lan usando la dirección IP.

Acceso a sitios locales desde Lan usando IIS Express

Nasir Mahmood
fuente
6

Visual Studio 2013 SP1 y superior (2015) incluye la configuración "Aplicar la configuración del servidor a todos los usuarios (almacenar en el archivo del proyecto)". Esto está habilitado por defecto. Cuando está habilitado, Visual Studio inicia IIS Express con argumentos de línea de comando que lo hacen usar un archivo de configuración diferente. La ubicación del archivo 'applicationhost.config' está en el directorio del proyecto en '.vs \ config'.

Jon Eldridge
fuente
1
Sí, ese era el problema en mi caso: intenté editar un archivo incorrecto. Da la casualidad de que puede ver dónde está la configuración de su aplicación IIS Express haciendo clic en el icono de la bandeja, enumerando todas las aplicaciones y seleccionando su. La ruta al archivo de configuración se escribirá a continuación. Mi estaba en .vs \ config
evilkos
1
Sí, lo mismo para mí. Muchas gracias.
Vas
1

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

  1. Obtenga la dirección IP de su host: ipconfigen la línea de comandos de Windows
  2. Ir a $ (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. Agregar: <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

¡La pista es que Visual Studio tiene su propio archivo applicationHost.config!

Daniel Eisenreich
fuente
0

Tuve muchos problemas para hacer que esto funcionara desde Visual Studio 2012, pasé de errores 404 a errores 503. Finalmente, lo que funcionó para mí fue borrar toda la configuración relacionada en la configuración de IIS Express ...

"\Program Files (x86)\IIS Express\appcmd.exe" list site
"\Program Files (x86)\IIS Express\appcmd.exe" delete site xxx
"\Program Files (x86)\IIS Express\appcmd.exe" delete site yyy

Luego creé un nuevo directorio virtual desde la página de propiedades en mi proyecto web en VS pero antes de crear el directorio virtual cambié el nombre de host a http: // myhost: 80 / luego presioné el botón crear directorio virtual. Anteriormente recibía errores que decían que el nombre de host debe ser 'localhost', pero esta vez no fue así. Y después de eso funcionó.

En resumen, primero borre la configuración existente y comience de nuevo.

Stu
fuente
-2

Si su dominio externo es "name.mydyndns.com", entonces debe escribir:

<binding protocol="http" bindingInformation="*:name.mydyndns.com" />

Esto funciona en Windows 2003 Server e IIS 7.5 Express.

Juan
fuente
-3

Captura de pantalla

en el grupo de aplicaciones en IIS, establezca "Habilitar aplicaciones de 32 bits" en "verdadero".

Mürsel Yıldırım
fuente
No estoy seguro de que esto realmente esté abordando la pregunta. ¿Querías publicar esto en otra pregunta?
ckittel