"No se puede iniciar el servidor web IIS Express". en Visual Studio

105

Intenté ejecutar mi servicio web a través de Visual Studio. Me enfrenté a un problema como:

---------------------------
Microsoft Visual Studio
---------------------------
Unable to launch the IIS Express Web server.

Failed to register URL "http://localhost:63591/" for site "xxxxxx" application
"/". Error description: The process cannot access the file because it is being
used by another process. (0x80070020)

---------------------------
OK   
---------------------------

Vi el administrador de tareas y descubrí que el sistema usa PID 4 y su descripción es NT Kernel & System. . Intenté detener el archivo http service. Todos los servicios de dependencia se detuvieron. Pero estoy enfrentando un problema al detener el servicio http como

The service is starting or stopping.  Please try again later.

Entonces, intenté detener e iniciar el servicio manualmente. Pero el proceso Finalizar está desactivado. Sería útil si alguien pudiera ayudar con este problema

Priya
fuente
1
viendo el problema después de actualizar Windows 10: developercommunity.visualstudio.com/content/problem/580466/…
Xiao

Respuestas:

129

De https://www.davidsalter.co.uk/unable-to-launch-the-iis-express-web-server-error-0x80070020/

El código de error 0x80070020significa ERROR_SHARING_VIOLATIONque, en el caso de IIS Express (o IIS), significa que el puerto en el que está intentando escuchar está siendo utilizado por otro proceso.

Utilice el netstatcomando para averiguar qué aplicación está usando el puerto.

netstat -ao | findstr <port_number_to_search_for>

El aparámetro le dice a netstat que muestre todas las conexiones y puertos de escucha.

El oparámetro le dice a netstat que muestre el ID de proceso asociado con la conexión.

Ejecutar el comando netstat anterior producirá resultados como:

C:\>netstat -ao | findstr 4026
TCP    12.0.0.1:4026        cs-pc:4026         LISTENING       9544

El último número que se muestra (9544 aquí) es el ID del proceso.

Chris Schiffhauer
fuente
11
¡Gran respuesta! No solo describe la solución, también incluye el significado de los parámetros. ¡Ojalá todas las respuestas fueran así!
Christian Payne
8
Esto me ayudó y resultó que el PID ofensivo era Chrome.exe. Reinicié Chrome y el problema desapareció.
astrosteve
1
Gran respuesta. Usando esto, encontré que skype estaba escuchando tanto en el puerto 80 como en el puerto 443. Maté a skype y luego pude lanzar iisexpress como de costumbre, ahora mostrando mis enlaces adicionales para los puertos 80 y 443
Alastair
3
ejecutar en una ventana de cmd elevada TASKKILL /PID 2756 /Freemplazar 2756con su ID de proceso
Stackoverfloweth
12
Esto también se puede hacer considerablemente más rápido con el -nconmutador: utiliza una salida "numérica", lo que significa que no pierde tiempo consultando el DNS para resolver las direcciones IP en nombres de host.
Tullo_x86
45

Tuve un problema similar al intentar ejecutar un proyecto desde Visual Studio 2019 en Windows 10. La aplicación no se pudo iniciar porque aparentemente otro proceso estaba usando el puerto. Sin embargo, el netstatcomando mostró que el puerto no estaba siendo utilizado por ninguna aplicación.

Después de pasar 2 días buscando en Google, encontré una solución que funcionó para mí. El puerto que estaba tratando de usar estaba en el rango de puertos excluidos que puede ver ejecutando el comando:

netsh interface ipv4 show excludedportrange protocol=tcp

Los culpables que reservaron estos puertos en mi caso fueron Docker para Windows e Hyper-V

La solución

Desinstalé Docker (ya que no lo necesitaba) y deshabilité Hyper-V. Para deshabilitar Hyper-V: Vaya a: Panel de control-> Programas y características-> Activar o desactivar las funciones de Windows. Desmarque Hyper-V y reinicie la computadora.

Después del reinicio del comando netsh interface ipv4 show excludedportrange protocol=tcp no mostró puertos reservados.

Luego agregué el puerto para mi aplicación al rango de puertos excluidos ejecutando el siguiente comando desde una línea de comando elevada:

netsh int ipv4 add excludedportrange protocol=tcp startport=50403 numberofports=1 store=persistent

Luego volví a habilitar Hyper-V (Docker se puede reinstalar si es necesario) y reinicié la computadora nuevamente.

Hyper-V ahora reservó sus puertos sin interferir con el puerto utilizado por mi aplicación: Rangos de puertos reservados

Philip Trenwith
fuente
Esto funcionó para mí, excepto que necesito Docker, así que lo desactivé al iniciar en lugar de desinstalarlo.
cderrick
2
Terminé cambiando mi puerto fuera del rango excluido ... pero ESTO me ahorró toneladas de tiempo. Gracias.
Cory
2
Al igual que @Cory, cambié mi puerto en vs para ser algo fuera de los rangos, molesto porque ahora tengo que cambiar las aplicaciones de referencia cada vez que hago esto, pero es mejor que un reinicio completo.
Nick Rubino
Estuve buscando esto durante años . Me pregunto si hay una manera de determinar exactamente qué aplicación robó mis puertos. Gracias.
Simon Mourier
Deshabilitar Hyper-V y reiniciarlo lo solucionó para mí
Kyle Burkett
30

Yo tuve el mismo problema. Acabo de reiniciar Visual Studio y funcionó.

MusicAndCode
fuente
1
Mi computadora se había reiniciado desde las actualizaciones y netstat no mostró ningún proceso usando el puerto. Esta fue la única solución que funcionó. ¡Gracias!
goodies4uall
1
Tuve
Sorprendentemente, reiniciar Visual Studio (2017) también funcionó para mí. ¡Gracias!
Thomas Gassmann
En mi caso, mi caja de Windows 10 se apagó y tuve que reiniciar dos veces . Otros proyectos de sitios web funcionaron bien (puerto local diferente), y ninguna de las otras respuestas aquí funcionó. Cambiar el puerto para el proyecto tampoco lo solucionó. Debe haber alguna otra configuración en IIS Express.
Granger
Parece que esto me sucede cada vez que ejecuto un proyecto en VS 2019 con depuración usando F5, luego intento ejecutarlo sin depurar usando Ctrl + F5, que es cuando falla. Un reinicio lo soluciona, aunque desearía poder evitar que suceda en primer lugar.
pwhe23
28

Tuve el mismo problema. Como @Kautsky Lozano menciona arriba, Otra aplicación está usando ese puerto.

Entonces [para un sistema operativo Windows] simplemente:

  • Open Resource Monitor (Administrador de tareas -> Rendimiento -> Open Resource Monitor)
  • Haga clic en la pestaña Red .
  • Y en TCP Connections, busque la aplicación que usa el puerto local que usa IIS Express y ciérrela. (era firefox en mi caso)
Zoti
fuente
¡Funcionó perfectamente!
Al Belmondo
12

Me encontré con el mismo problema después de actualizar una solución de Visual Studio 2012 a 2015. Llegué aquí y corrí netstatsolo para descubrir que ninguna otra aplicación estaba usando los mismos puertos. Resulta que tenía los mismos sitios con los mismos puertos asignados en el applicationhost.configen Users/<username>/Documents/IISExpress/configy el applicationhost.configde la .vscarpeta dentro de mi solución. Debo señalar que el problema tampoco comenzó inmediatamente después de la actualización. Simplemente comienza a fallar constantemente una mañana. Un par de reinicios tampoco parecieron resolver el problema.

Eliminar los sitios en conflicto del almacenado en mis Documentos y reiniciar Visual Studio resolvió el problema.

Steve Haselschwerdt
fuente
Esto me ayudó: applicationhost.configestá en la .vs\configcarpeta debajo de la carpeta de su solución.
Erik Oppedijk
6

Si netstat no muestra nada ya usando el puerto

netstat -ano | findstr <your port number>

El puerto puede estar excluido, pruebe este comando para ver si el rango está bloqueado por algo más:

netsh interface ipv4 show excludedportrange protocol=tcp

Puede intentar desbloquear el rango desde el puerto de inicio para varios puertos (necesita el símbolo del sistema con el administrador):

netsh int ip delete excludedportrange protocol=tcp numberofports=<number of ports> startport=<start port>

Para mí, no pude desbloquearlos, solo obtuve "Acceso denegado", así que terminé teniendo que elegir otro puerto para mi sitio.

John Leonard
fuente
3

Acabo de tener este problema a pesar de que netstat no mostró ningún conflicto.

Lo siguiente me lo arregló:

  1. Cerrar Visual Studio
  2. Abre el Explorador de archivos
  3. Navega a la carpeta del proyecto infractor
  4. Eliminar las carpetas obj y bin
  5. Elimine el archivo * .user (esto probablemente sea opcional)
  6. Reinicie Visual Studio y vuelva a intentarlo
AaronK
fuente
2

Tuve este problema al actualizar un proyecto MVC . Copié el nuevo MVC .csproj sobre mi archivo .csproj existente y luego volví a trabajar en un proyecto completamente funcional. Lo que no tuve en cuenta es el número de puerto existente en el antiguo .csproj. El nuevo proyecto tenía un nuevo número de puerto, pero compartía el nombre del proyecto / ensamblado. Eso fue suficiente para hacer que IIS Express perdiera la cabeza y lanzara esta excepción.

Basta con extraer el número de puerto antiguo de git y cambiar la URL de IIS Express para incluirlo en la configuración del proyecto para solucionarlo.

Chris Moschini
fuente
2

El primer paso más fácil sin ingresar a la consola de comandos es cerrar todas las aplicaciones (incluido VS), luego iniciar VS por sí mismo e intentarlo nuevamente. Es probable que haya otra aplicación como su navegador causando el conflicto. En mi caso Chrome lo causó y se solucionó al apagar todo y reiniciar VS. Abrí Chrome nuevamente y todo estuvo bien.

Las cosas de netstat anteriores son útiles, pero para mí eso es solo si no puedes hacer lo que estoy sugiriendo.

singleTrackVale
fuente
2

para resumir todas las respuestas. Hay 2 soluciones. Ambos trabajaron para mí. - Solución n. ° 1 Elimine la aplicación que usa el mismo puerto. - Solución # 2 Configure IIS Express para usar un puerto diferente para su proyecto.

Solución # 1 (suponiendo que el puerto en el mensaje de error fuera 443) Ejecute en la línea de comando:

netstat -ao | findstr 443

devuelve: TCP 0.0.0.0:443 pe01:0 LISTENING 2904 El último número (gracias a @ chris-schiffhauer) es PID para matar. Vaya al Administrador de tareas -> Procesos -> [Mostrar procesos de todos los usuarios], elimine un proceso con PID = 2904. En mi caso, fue el host de VmWare.

Solución # 2 (Suponiendo que el mensaje fuera: No se pudo registrar la URL " http: // localhost: 433 / " para el sitio "MyProject.Website0" ... ). Abra el siguiente archivo en el bloc de notas ++: C:\Users\MY_USER_NAME\Documents\IISExpress\config\applicationhost.configBusque en él una línea que contenga:

<site name="MyProject.Website0" id="...
...
            <bindings>
                <binding protocol="http" bindingInformation="*:80:localhost" />
                <binding protocol="https" bindingInformation="*:443:localhost" />
            </bindings>

Cambie 433a otra cosa, como 4330o elimine la <binding.../>etiqueta en conflicto .

epoxi
fuente
2

En mi caso, hacer lo siguiente funcionó:

  • Elimine el sitio de .vs \\ config \ applicationhost.config
  • Elimine el sitio de Documents \ IISExpress \ config \ applicationhost.config
  • Elimina IISUrl del .csproj

Cuando reinicié Visual Studio, asignó al proyecto un número de puerto completamente nuevo y funcionó perfectamente

djeastm
fuente
2

Los números de puerto no coinciden

En mi caso, el problema estaba en mis Bindings Tags que se encuentran en el archivo de configuración en .vs debajo de mi carpeta de soluciones, los números de puerto no coincidían. Las fijaciones eran las siguientes

<bindings>
     <binding protocol="http" bindingInformation=":16433:localhost" />
</bindings>

Y en mi configuración tenía la URL configurada como http://localhost:1943/

Entonces, lo que hice fue eliminar el enlace interno y ejecutar mi aplicación web, luego generé un nuevo enlace con un número diferente, luego copié el nuevo puerto generado en mi configuración, luego el error desapareció.

Héroe de Siphamandla Ngwenya
fuente
Esta vez (he tenido este problema antes, ha sido una de las muchas causas presentadas en varias respuestas aquí) esta fue la causa.
gburton
2

Después de actualizar Windows 10 y / o Visual Studio 16+, puede suceder debido a un error interno que IISExpress no puede registrar ningún sitio web de desarrollo porque ya no acepta localhostconexiones.

Para solucionar el problema, solo tiene que volver a registrar el enlace. Para hacerlo, ejecute desde un shell administrativo el siguiente comando:

netsh http add iplisten ipaddress=:: 
Yennefer
fuente
Eso funcionó para mí, ¡muchas gracias!
Jakub Szumiato
1

Yo era capaz de arreglar este problema mediante la eliminación de todo, desde <site>que </site>las etiquetas de

Users/<username>/Documents/IISExpress/config/applicatiohost.config expediente

<sites>
  <site>
     .
     .   ===> remove this content including the <site> and </site> tags.
     .
  </site>
</sites>
nPcomp
fuente
1

Habiendo desperdiciado medio día tratando de solucionar este mismo problema, sentí que debería agregar la solución que finalmente funcionó para mí.

TL; DR Si netstatindica que el problema no está en uso, pruebe algunos otros en un rango totalmente diferente

Me he encontrado con este problema antes, pero generalmente encuentro que reiniciar Visual Studio, cambiar los puertos (incrementar en 1) o reiniciar hacen el truco. Sin embargo, en esta ocasión nada de esto ayudó, ynetstat no encontró un proceso conflictivo. Incluso reinstalé IIS y Visual Studio y eliminé varios otros programas que sospechaba que podrían estar interfiriendo. Parecía que IIS intentaba lanzar varias instancias del mismo sitio.

Finalmente intenté correr netstatsin findstr. Analicé visualmente la lista de puertos activos y noté que, aunque los que había probado no estaban en la lista, había algunos procesos que usaban puertos en un rango similar. Así que, en cambio, busqué un rango que fuera gratuito, elegí un número de puerto y que ahora parece estar funcionando.

Me encantaría saber si alguien puede explicar por qué esto podría haber funcionado.

Phil
fuente
Esta solución también me lo arregló.
Rastographics
1

Me encontré con este problema en Visual Studio 2019 hoy y pasé 3 horas antes de finalmente resolver el problema. Visual Studio usa 2 archivos para rastrear el número de puerto SSL, por lo que debe corregir ambos y debe corregir ambos mientras Visual Studio está cerrado. Los dos archivos son el archivo applicationhost.config que se encuentra en la carpeta .vs \ ??? \ config de su solución; y también la carpeta .csproj.user de su proyecto web. Edite ambos archivos y elimine las configuraciones ofensivas. Quizás incluso simplemente elimine ambos archivos. Luego, vuelva a abrir su aplicación en Visual Studio. ¡Buena suerte!

Rob Kraft
fuente
Si su solución contiene un sitio web simple y antiguo (no una aplicación web), los números de puerto también están en el archivo de solución .sln
nuander
1
  1. Cerrar visual studio
  2. eliminar carpeta ".vs"
  3. Intente cambiar el puerto "localhost: 8080"

Funcionó para mí.

Ömer Güngör
fuente
1

Seguí las instrucciones de @ Zoti y usé Resource Monitor para encontrar el puerto en cuestión.

Resulta que a Outlook se le había asignado al azar el puerto para su canal de comunicaciones. Siendo la moraleja de la historia, podría ser absolutamente cualquier cosa.

Greg B
fuente
1

El motivo de este error es que le dio un número de puerto incorrecto a su aplicación.

just use http ports for your application to run

use el puerto cercano al número 8080, es decir:

localhost: 8090

para cambiar el puerto para su aplicación en visual-Studio

goto project properties > web > Server > ProjectUrl

Talha Rafique
fuente
0

Ya intenté lo siguiente:

  • Visual Studio reiniciado
  • Verifique todos los puertos disponibles que puedan estar escuchando mi número específico, pero siempre devuelve cero resultados. Ningún proceso está escuchando en mi puerto.
  • También intenté usar esto pero cero resultados.

    netstat -aon | buscar ": 80"

  • También intenté usar pero también devolví cero resultados.

    netstat -ao | Findstr

Entonces, lo que hice fue eliminar este " Microsoft.VsHub.Server.HttpHostx64.exe " y luego mi proyecto se inició con éxito y se lanzó en el navegador. Se solucionó el error. No estoy seguro de por qué, pero funciona.

Aquí está la captura de pantalla:

ingrese la descripción de la imagen aquí

Willy David Jr
fuente
0

Tuve el mismo problema, pero se resolvió cuando reinicié usando privilegios de administrador. (Podría haber sido solo el reinicio)

Vaibhav Garg
fuente
0

Tuve el mismo problema hoy, y nada de lo que encontré en Internet funcionó. He estado usando el puerto 2057 durante años, pero de repente ya no funcionó. Cambiarlo a otro número bajo como 2058 dio el mismo mensaje de error, pero cuando lo cambié a 20057, todo volvió a funcionar. Quizás algo cambió con la forma en que se manejan los números de puerto más bajos.

Bogi lenvig
fuente