"Impossibile avviare il server Web IIS Express." in Visual Studio


105

Ho tentato di eseguire il mio servizio web tramite Visual Studio. Ho affrontato un problema come:

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

Ho visto il task manager e ho scoperto che PID 4 è utilizzato dal sistema e la sua descrizione è NT Kernel & System. Quindi ho provato a interrompere il file http service. Tutti i servizi di dipendenza sono stati arrestati. Ma sto affrontando un problema nell'arresto del servizio http come

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

Quindi, ho provato ad arrestare e avviare manualmente il servizio. Ma il processo Fine è disabilitato. Sarebbe utile se qualcuno potesse aiutare con questo problema


1
vedendo il problema dopo l'aggiornamento di Windows 10: Developercommunity.visualstudio.com/content/problem/580466/…
Xiao

Risposte:


129

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

Il codice di errore 0x80070020significa ERROR_SHARING_VIOLATIONche, nel caso di IIS Express (o IIS), significa che la porta su cui sta tentando di ascoltare è utilizzata da un altro processo.

Usa il netstatcomando per scoprire quale applicazione sta utilizzando la porta.

netstat -ao | findstr <port_number_to_search_for>

Il aparametro dice a netstat di visualizzare tutte le connessioni e le porte in ascolto.

Il oparametro indica a netstat di visualizzare l'ID del processo associato alla connessione.

L'esecuzione del comando netstat sopra produrrà output come:

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

L'ultimo numero visualizzato (9544 qui) è l'ID del processo.


11
Bella risposta! Non solo descrivi la soluzione, ma includi anche il significato dei parametri. Vorrei che tutte le risposte fossero così!
Christian Payne

8
Questo mi ha aiutato e si è scoperto che il PID incriminato era Chrome.exe. Ho riavviato Chrome e il problema è andato via.
astrosteve

1
Bella risposta. Usando questo ho scoperto che skype era in ascolto sia sulla porta 80 che sulla porta 443. Ho ucciso skype e sono stato quindi in grado di avviare iisexpress normalmente, mostrando ora i miei collegamenti extra per le porte 80 e 443
Alastair

3
eseguito in una finestra cmd elevata, TASKKILL /PID 2756 /Fsostituisci 2756con il tuo ID processo
stackoverfloweth

12
Ciò può essere reso notevolmente più veloce anche con lo -nswitch: utilizza un output "numerico", il che significa che non perde tempo a interrogare DNS per risolvere gli indirizzi IP in nomi host.
Tullo_x86

46

Ho riscontrato un problema simile durante il tentativo di eseguire un progetto da Visual Studio 2019 su Windows 10. Impossibile avviare l'applicazione perché la porta era apparentemente utilizzata da un altro processo. Tuttavia, il netstatcomando ha mostrato che la porta non era utilizzata da alcuna applicazione.

Dopo aver trascorso 2 giorni su Google, ho trovato una soluzione che funzionava per me. La porta che stavo cercando di utilizzare era nell'intervallo di porte escluse che puoi vedere eseguendo il comando:

netsh interface ipv4 show excludedportrange protocol=tcp

I colpevoli che hanno riservato queste porte nel mio caso sono stati Docker per Windows e Hyper-V

La soluzione

Ho disinstallato Docker (poiché non ne avevo bisogno) e disabilitato Hyper-V. Per disabilitare Hyper-V: Vai a: Pannello di controllo-> Programmi e funzionalità-> Attiva o disattiva le funzionalità di Windows. Deseleziona Hyper-V e riavvia il computer.

Dopo il riavvio il comando netsh interface ipv4 show excludedportrange protocol=tcpnon ha mostrato porte riservate.

Ho quindi aggiunto la porta per la mia applicazione all'intervallo di porte escluse eseguendo il seguente comando da una riga di comando con privilegi elevati:

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

Quindi ho riattivato Hyper-V (Docker può essere reinstallato se necessario) e riavviato nuovamente il computer.

Hyper-V ora ha riservato le sue porte senza interferire con la porta utilizzata dalla mia applicazione: intervalli di porte riservati


Questo ha funzionato per me, tranne che ho bisogno di Docker, quindi l'ho disabilitato all'avvio invece di disinstallarlo.
cderrick

2
Ho finito per cambiare la mia porta fuori dal range escluso .. ma QUESTO mi ha fatto risparmiare un sacco di tempo. Grazie.
Cory

2
Come @Cory, ho cambiato la mia porta in vs per essere qualcosa al di fuori degli intervalli, infastidito perché ora devo cambiare le app di riferimento ogni volta che lo faccio, ma è meglio di un riavvio completo.
Nick Rubino il

Lo stavo cercando da anni . Mi chiedo se c'è un modo per determinare esattamente quale app ha rubato le mie porte? Grazie.
Simon Mourier

La disabilitazione di Hyper-V e il riavvio hanno risolto il problema per me
Kyle Burkett

30

Ho avuto lo stesso problema. Ho appena riavviato Visual Studio e ha funzionato.


1
Il mio computer si era riavviato dagli aggiornamenti e netstat non ha mostrato alcun processo utilizzando la porta. Questa era l'unica soluzione che ha funzionato. Grazie!
goodies4uall

1
ho dovuto riavviare anche la mia macchina
Mahmoud Hboubati

Sorprendentemente, il riavvio di Visual Studio (2017) ha funzionato anche per me. Grazie!
Thomas Gassmann

Nel mio caso, la mia scatola di Windows 10 è stata schermata blu e ho dovuto riavviare due volte . Altri progetti di siti web hanno funzionato bene (porta locale diversa) e nessuna delle altre risposte qui ha funzionato. Anche la modifica della porta per il progetto non ha risolto il problema. Ci deve essere qualche altra configurazione in IIS Express stesso.
Granger

Sembra che questo accada a me ogni volta che eseguo un progetto in VS 2019 con il debug usando F5, quindi in seguito provo a eseguirlo senza debug usando Ctrl + F5 che è quando fallisce. Un riavvio lo risolve, anche se vorrei poter effettivamente impedire che accada in primo luogo.
pwhe23

28

Ho avuto lo stesso problema. Come menzionato sopra da @Kautsky Lozano Un'altra applicazione sta usando quella porta.

Quindi [per un sistema operativo Windows] solo:

  • Apri monitoraggio risorse (Task Manager -> Prestazioni -> Apri monitoraggio risorse)
  • Fare clic sulla scheda Rete .
  • In Connessioni TCP, trova l'applicazione che utilizza la porta locale utilizzata da IIS Express e chiudila. (era Firefox sul mio caso)

Ha funzionato perfettamente!
Al Belmondo

12

Mi sono imbattuto nello stesso problema dopo aver aggiornato una soluzione da Visual Studio 2012 al 2015. Ero venuto qui e sono corso netstatsolo per scoprire che nessun'altra applicazione utilizzava le stesse porte. Si scopre che avevo gli stessi siti con le stesse porte mappate in applicationhost.configat Users/<username>/Documents/IISExpress/confige applicationhost.configin.vs cartella all'interno della mia soluzione. Devo notare che il problema non è iniziato neanche subito dopo l'aggiornamento. Inizia a fallire costantemente una mattina. Anche un paio di riavvii non sembravano risolvere il problema.

La rimozione dei siti in conflitto da quello archiviato nei miei documenti e il riavvio di Visual Studio ha risolto il problema.


Questo mi ha aiutato: si applicationhost.configtrova nella .vs\configcartella sotto la cartella della soluzione.
Erik Oppedijk

6

Se netstat non mostra nulla già utilizzando la porta

netstat -ano | findstr <your port number>

La porta potrebbe essere esclusa, prova questo comando per vedere se l'intervallo è bloccato da qualcos'altro:

netsh interface ipv4 show excludedportrange protocol=tcp

Puoi provare a sbloccare l'intervallo dalla porta iniziale per un numero di porte (è necessario il prompt dei comandi con l'amministratore):

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

Per me non sono riuscito a sbloccarli, ho appena ricevuto "Accesso negato", quindi ho dovuto scegliere un'altra porta per il mio sito.



3

Ho appena avuto questo problema anche se netstat non ha mostrato alcun conflitto.

Quanto segue lo ha risolto per me:

  1. Chiudi Visual Studio
  2. Apri Esplora file
  3. Vai alla cartella del progetto incriminato
  4. Elimina le cartelle obj e bin
  5. Elimina * .user file (probabilmente è facoltativo)
  6. Riavvia Visual Studio e riprova

2

Ho avuto questo problema durante l' aggiornamento di un progetto MVC . Ho copiato il nuovo MVC .csproj sul mio file .csproj esistente, quindi sono tornato a un progetto completamente funzionante. Quello che non ho considerato è il numero di porta esistente nel vecchio .csproj. Il nuovo progetto aveva un nuovo numero di porta, ma condivideva il nome del progetto / assieme. Questo è stato sufficiente per far perdere la testa a IIS Express e lanciare questa eccezione.

Basta scavare il vecchio numero di porta da git e modificare l'URL di IIS Express per includerlo nelle impostazioni del progetto per risolverlo.


2

Il primo passaggio più semplice senza entrare nella console dei comandi è chiudere tutte le applicazioni (incluso VS), quindi avviare VS da solo e riprovare. Probabilmente è un'altra applicazione come il tuo browser a causare il conflitto. Nel mio caso Chrome lo ha causato ed è stato risolto chiudendo tutto e riavviando VS. Ho riaperto Chrome ed è andato tutto bene.

La roba netstat sopra è utile, ma per me è solo se non puoi fare quello che sto suggerendo.


2

per riassumere tutte le risposte. Ci sono 2 soluzioni. Entrambi hanno funzionato per me. - Soluzione n. 1 Elimina l'app che utilizza la stessa porta. - Soluzione n. 2 Configurare IIS Express per utilizzare una porta diversa per il progetto.

Soluzione # 1 (supponendo che la porta nel messaggio di errore fosse 443) Esegui nella riga di comando:

netstat -ao | findstr 443

ritorna: TCP 0.0.0.0:443 pe01:0 LISTENING 2904 L'ultimo numero (grazie a @ chris-schiffhauer) è PID da uccidere. Vai a Task Manager -> Processi -> [Mostra processi da tutti gli utenti], uccidi un processo con PID = 2904. Nel mio caso, era l'host VmWare.

Soluzione 2 (supponendo che il messaggio fosse: Impossibile registrare l'URL " http: // localhost: 433 / " per il sito "MyProject.Website0" ... ). Apri il seguente file in notespad ++: C:\Users\MY_USER_NAME\Documents\IISExpress\config\applicationhost.configtrova in esso una riga contenente:

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

Passa 433a qualcos'altro, come 4330o elimina il <binding.../>tag in conflitto .


2

Nel mio caso, fare quanto segue ha funzionato:

  • Elimina il sito da .vs \\ config \ applicationhost.config
  • Elimina il sito da Documents \ IISExpress \ config \ applicationhost.config
  • Elimina IISUrl dal file .csproj

Quando ho riavviato Visual Studio, ha assegnato al progetto un numero di porta completamente nuovo e ha funzionato perfettamente


2

I numeri di porta non corrispondono

Nel mio caso il problema era nei miei tag di binding trovati nel file di configurazione in .vs nella cartella della mia soluzione, i numeri di porta non corrispondevano. Gli attacchi erano i seguenti

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

E nelle mie impostazioni avevo l'URL impostato come http://localhost:1943/

Quindi quello che ho fatto è stato eliminare l'associazione interna ed eseguire la mia app Web, quindi ha generato una nuova associazione con un numero diverso, quindi ho copiato la nuova porta generata nelle mie impostazioni, quindi l'errore è scomparso.


Questa volta (ho avuto questo problema prima, è stata una delle tante cause presentate in varie risposte qui) questa era la causa.
gburton

2

Dopo l'aggiornamento di Windows 10 e / o Visual Studio 16+, potrebbe accadere a causa di un bug interno che IISExpress non riesca a registrare alcun sito di sviluppo perché non accetta più localhostconnessioni.

Per risolvere il problema, devi solo registrare nuovamente l'associazione. A tale scopo, eseguire da una shell amministrativa il seguente comando:

netsh http add iplisten ipaddress=:: 

Ha funzionato per me, grazie mille!
Jakub Szumiato il


1

Sono stato in grado correzione questo problema rimuovendo tutto da <site>a </site>tag

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

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

1

Avendo appena sprecato mezza giornata cercando di risolvere lo stesso problema, ho sentito di dover aggiungere la soluzione che alla fine ha funzionato per me.

TL; DR Senetstat indica che la problematica non è in uso, provane comunque qualcuna in un intervallo completamente diverso

Mi sono imbattuto in questo problema in passato, ma di solito trovo che il riavvio di Visual Studio, la modifica delle porte (incremento di 1) o il riavvio facciano il trucco. Tuttavia in questa occasione niente di tutto ciò ha aiutato e netstatnon è stato trovato un processo conflittuale. Ho anche reinstallato IIS e Visual Studio e rimosso molti altri programmi che sospettavo potessero interferire. Sembrava che IIS stesse tentando di avviare più istanze dello stesso sito.

Alla fine ho provato a correre netstatsenza findstr. Ho scansionato visivamente l'elenco delle porte attive e ho notato che sebbene quelle che avevo provato non fossero elencate, c'erano alcuni processi che utilizzavano porte in un intervallo simile. Così invece ho cercato un intervallo che fosse libero, ho scelto un numero di porta e che ora sembra funzionare.

Mi piacerebbe sapere se qualcuno può spiegare perché potrebbe aver funzionato?


Questa soluzione ha anche risolto il problema per me.
Rastographics

1

Oggi mi sono imbattuto in questo problema in Visual Studio 2019 e ho trascorso 3 ore prima di capire finalmente il problema. Visual Studio utilizza 2 file per tenere traccia del numero di porta SSL, quindi è necessario correggere entrambi e devi correggere entrambi mentre Visual Studio è chiuso. I due file sono il file applicationhost.config che si trova nella cartella .vs \ ??? \ config della soluzione; e anche la cartella .csproj.user del tuo progetto web. Modifica entrambi i file e rimuovi le configurazioni offensive. Forse anche solo eliminare entrambi i file. Quindi riapri l'app in Visual Studio. In bocca al lupo!


Se la tua soluzione contiene un semplice sito web vecchio stile (non un'applicazione web), i numeri di porta si trovano anche nel file della soluzione .sln
nuander

1
  1. Chiudi Visual Studio
  2. elimina la cartella ".vs"
  3. Prova a cambiare la porta "localhost: 8080"

Ha funzionato per me.


1

Ho seguito le istruzioni di @ Zoti e ho utilizzato Resource Monitor per trovare la porta in questione.

Risulta che a Outlook è stata assegnata in modo casuale la porta per il suo canale di comunicazione. Morale della storia, potrebbe essere assolutamente qualsiasi cosa.


1

Il motivo di questo errore è che hai fornito il numero di porta sbagliato alla tua applicazione.

just use http ports for your application to run

usa la porta vicino al numero 8080, cioè:

localhost: 8090

per cambiare la porta per la tua applicazione in visual-Studio

goto project properties > web > Server > ProjectUrl


0

Ho già provato quanto segue:

  • Visual Studio riavviato
  • Controlla tutte le porte disponibili che potrebbero ascoltare il mio numero specifico ma restituisce sempre zero risultati. Nessun processo è in ascolto nella mia porta.
  • Ho anche provato a usare questo ma senza risultati.

    netstat -aon | trova ": 80"

  • Ho anche provato a usare ma restituisco anche zero risultati.

    netstat -ao | findstr

Quindi quello che ho fatto è stato eliminare questo " Microsoft.VsHub.Server.HttpHostx64.exe ", quindi il mio progetto è stato avviato correttamente e avviato nel browser. L'errore è stato risolto. Non sono sicuro del perché ma funziona.

Ecco lo screenshot:

inserisci qui la descrizione dell'immagine


0

Ho avuto lo stesso problema ma si è risolto quando ho riavviato utilizzando i privilegi di amministratore. (Potrebbe essere stato solo il riavvio)


0

Oggi ho avuto lo stesso problema e niente di quello che ho trovato su Internet ha funzionato. Uso la porta 2057 da anni, ma improvvisamente non ha più funzionato. Cambiandolo a un altro numero basso come 2058 ha dato lo stesso messaggio di errore, ma quando l'ho cambiato in 20057, tutto ha funzionato di nuovo. Forse qualcosa è cambiato con il modo in cui vengono gestiti i numeri di porta inferiori.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.