Connessione a Visual Studio per il debug del server IIS Express tramite lan


84

Ho un'applicazione ASP.NET MVC3 di prova sviluppata in VS2012. Quando avvio il debug, si accede all'app dalla macchina host tramite la richiesta a http://localhost:<portnumber>. Ma se provo ad accedere alla stessa applicazione dalla macchina remota nella intranet tramite http://<ip>:<portnumber>ottengo HTTP error 400: Bad request. Invalid Host Name.Finché viene eseguito su IIS Express, qualsiasi configurazione del server è inaccessibile.

Ci sono modi per risolverlo?


Usa la nostra estensione gratuita, Conveyor per fare questo marketplace.visualstudio.com/… funziona senza modifiche alla configurazione, indolore.
Jim W dice di reintegrare Monica l'

Risposte:


138

Aggiornare

Ho realizzato un video che descrive meglio il processo, https://youtu.be/5ZqDuvTqQVs

Se utilizzi Visual Studio 2013 o versioni successive, assicurati di eseguirlo come amministratore affinché funzioni.


Apri il file %USERPROFILE%\My Documents\IISExpress\config\applicationhost.config(in VS2015 potrebbe essere $(solutionDir)\.vs\config\applicationhost.config). Dentro dovresti vedere qualcosa del genere:

<site name="WebSite1" id="1" serverAutoStart="true">
    <application path="/">
        <virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%\WebSite1" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:8080:localhost" />
    </bindings>
</site>

Cambia bindingInformation=":8080:localhost"in bindingInformation="*:8080:*"(il numero di porta, 8080 nel mio caso, sarà diverso).

Nota: se non funziona, provare con bindingInformation="*:8080:l'asterisco può essere rimosso.

Quindi assicurati che il tuo firewall consenta le connessioni in entrata su quella porta. Potrebbe essere necessario riavviare il sistema o almeno Visual Studio per far sì che IISExpress ricarichi il file di configurazione.

Se questo non funziona, dai un'occhiata a questa risposta: https://stackoverflow.com/a/5186680/985284


30
Questa soluzione non ha funzionato per me. In VS2013, dopo aver modificato l'attributo bindingInformation, quando apro l'IDE e carico il progetto viene creata una nuova voce (cioè <site name="Website1(1)" id="2" serverAutoStart="true">e non riesco ancora ad accedere al sito web da un altro computer.
Yván Ecarri

5
Questo ha funzionato per me in VS2013: gilesey.wordpress.com/2013/04/21/…
Jay Cummins,

10
Ha funzionato per me. La modifica principale era eseguire Visual Studio come amministratore.
Tanmay Mandal

20
Non so perché mi sembra di essere stato l'unico con questo problema, ma bindingInformation="*:8080:*"non ha funzionato per me e ha provocato il problema che @ Y.Ecarri stava riscontrando. Ciò che alla fine ha finito per lavoro stava scendendo gli asterischi: bindingInformation=":8080:". Il ragazzo mi ha fatto impazzire, spero che aiuti qualcuno.
Drazen Bjelovuk

5
Come Drazen, ha dovuto usare la modalità Admin + bindingInformation=":8080:"(senza *)
Matthieu Charbonnier,

43

VisualStudio 2015 Non amministratore

  1. Nella directory della soluzione, nel file .vs\config\applicationHost.configcambia la riga

    <binding protocol="http" bindingInformation="*:44302:localhost" />

    per

    <binding protocol="http" bindingInformation=":44302:" />

    (dove 44302 è la tua porta)


  1. Da un prompt dei comandi dell'amministratore:

    io. Abilita il binding alla porta non amministratore

    netsh http add urlacl url=http://*:44302/ user=Everyone

    ii. Consenti tramite firewall

    netsh advfirewall firewall add rule name="IISExpress visualstudio app" protocol=tcp localport=44302 dir=in action=allow


  1. Avvia il debug da VisualStudio

Nota che la cartella .vs è nascosta su Windows 10. Mostra i file nascosti per vederla.
bhathiya-perera

Oh! Tu sei il mio eroe! FINALMENTE! La chiave era la configurazione della cartella .vs. Non posso ringraziarti abbastanza!
twsmale

Nota come @ArunPrasadES mentiod di seguito, esegui VS come amministratore se si verifica un errore.
Elmer

@Elmer Eseguire il tuo IDE ed eseguire il debug dei tuoi programmi come amministratore è una cattiva idea in generale (con poche eccezioni). Ancora più importante, maschera i problemi di autorizzazione durante lo sviluppo (quando vengono risolti facilmente), il che alla fine rende il tuo programma (inutilmente) necessario essere eseguito come amministratore - cose come il salvataggio di file in una posizione solo amministratore, ecc. Risolvi il problema con il tuo IDE e / o OS / autorizzazioni utente.
gregmac

@gregmac Scusa per il commento negativo, quello che volevo dire era che il mio IIS aveva problemi se cambiavo le opzioni di associazione e non eseguivo VS come amministratore, alcuni ID di errore di processo, che presumo siano correlati alle autorizzazioni di Windows 10 poiché ho un Windows nuovo di zecca 10 con una nuova installazione VS 2019. Per il resto sono d'accordo con te al 100%
Elmer

21

Tranne che per modificare il file di configurazione di iisexpress, a volte è anche necessario eseguire il comando come di seguito.

netsh http add urlacl url = http: // *: 49419 / user = Everyone


A che serve la porta 49419? È solo un esempio di porta, che potrebbe anche essere 8080?
oligofren

Rispondendo alla mia domanda: sì, è la porta su cui è in esecuzione l'app. Se usi questa risposta, non è più necessario eseguire Visual STudio come amministratore.
oligofren

1
Puoi fornire una breve spiegazione di come funziona?
Shishir Gupta

12

Come evitare di eseguire Visual Studio come amministratore

Utilizzando sia di Garret e @ risposta di shangkeyun è possibile ottenere il collegamento al sito web in esecuzione senza la necessità di eseguire Visual Studio come un utente amministratore:

  1. Aperto %USERPROFILE%\My Documents\IISExpress\config\applicationhost.config
  2. Cerca il tuo sito utilizzando name=MySiteName
  3. Duplica l' <binding>elemento esistente nella <bindings>sezione. Ora dovresti avere due righe con binding.
  4. Rimuovere la parte "localhost" in bindingInformation.
  5. Ora dovrebbe apparire così, supponendo che la porta sia 12345:

    <binding protocol="http" bindingInformation="*:12345:localhost" />
    <binding protocol="http" bindingInformation="*:12345:" />
    
  6. Abilita il binding alla porta non amministratore

    netsh http add urlacl url=http://*:12345/ user=Everyone
    

EDIT 2019: gregmac ha aggiunto un passaggio per autorizzare l'istanza VS. Non ne ho mai avuto bisogno, ma elencalo comunque:

  1. netsh advfirewall firewall add rule name="IISExpress visualstudio app" protocol=tcp localport=12345 dir=in action=allow

6
L'aggiunta di netsh ha modificato l'errore in "Servizio non disponibile"
tofutim

@tofutim stesso qui. hai trovato una soluzione?
frostymarvelous

Hai riavviato Visual Studio in seguito?
oligofren

Ciao, ho appena notato che il comando netsh non era corretto se combinato con le righe precedenti. Ho usato 12345 come porta sopra, ma avevo usato 49419 come porta di esempio nel comando netsh. Questo problema è stato risolto nel mio aggiornamento.
oligofren

10

Poiché non sono in grado di aggiungere un commento al post di @Garret Fogerlie e in risposta al problema dei commentatori (@ Y.Ecarri e @SamuelEdwinWard), ho seguito quanto suggerito da Garret, utilizzando Visual Studio 2013, eseguendolo in modalità amministratore e modificando il application.configfile.

Dopo aver avviato il debug e visto che ricevevo lo stesso messaggio di errore, sono tornato application.confige ho visto che era stata creata una nuova voce per il mio sito proprio come il problema di Y.Ecarri.

Quindi ho interrotto il debug, ho tenuto la mia soluzione aperta in Visual Studio e ho modificato application.confignuovamente il file per la nuova voce. Ho anche semplicemente rimosso le *canzoni e localhostcompletamente, quindi ho avuto quanto segue per la nuova voce:

<binding protocol="https" bindingInformation=":44300:" />


Questa è l'unica soluzione che ha aiutato! Grazie.
codice 5

2

Alcuni di voi potrebbero dedicare molto tempo a modificare e testare utilizzando la directory% USERPROFILE%. Se stai eseguendo il debug VS , usa $ (solutionDir) .vs \ config \ applicationhost.config


1

Grazie a byteit:

Vai su applicationhost.config in Documents / IISExpress / config

trova la voce per il sito specifico su cui stai lavorando:

Inserisci:

<binding protocol="http" bindingInformation="*:<your site port>:*" />

di fronte all'esistente

 <binding protocol="http" bindingInformation="*:<your site port>:localhost" />

Per ottenere la soluzione senza dover VS2013 creare una nuova voce xml del sito Web al riavvio. Dovrai eseguire come amministratore.


1

Dopo le configurazioni di cui sopra, ho dovuto eseguire Visual Studio in modalità amministrativa.

inserisci qui la descrizione dell'immagine


0

Questo è ciò che ha funzionato per me:

  • Avvia Gestione IIS
  • Aggiungi una nuova directory virtuale che punta alla cartella dei progetti (C:\VSProjects nel mio caso)
  • Seleziona la nuova directory virtuale all'interno del gestore IIS. Seleziona Directory Browsingdall'elenco di opzioni. Sul lato destro c'è un Enablepulsante. Cliccalo.

Ora posso accedere alla mia cartella e al cestino del progetto sulla rete tramite mypcname\VSProjects\myProj\outputBinViewer.


0

Avevo un problema molto simile durante il debug in Visual Studio Code , l'ho risolto aggiungendo:

"env": {
      // ...
      "ASPNETCORE_URLS": "http://*:5000" // change to the port you are using
      // ...
},

.. per lanciare.json

Apparentemente, per impostazione predefinita associa il protocollo http a "localhost: 5000", quindi funziona con localhost ma non con indirizzo ip , né in remoto né in locale.

Se stai tentando di raggiungere un punto di interruzione tramite una richiesta proveniente da un altro computer, non dimenticare di controllare le impostazioni del firewall (e / o dell'antivirus)

spero che sia di aiuto

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.