Skip to main content

Visual Studio 2013 e 2015: Unable to start debugging on the web server. Could not start ASP.NET debugging – Come risolvere

  • Se vi siete imbattuti in questo articolo è probabile che vi sia capitato, al momento di eseguire il debug della vostra Web Application con Visual Studio, di visualizzare il seguente messaggio di errore:

Unable to start debugging on the web server. Could not start ASP.NET debugging. More information may be available by starting the project without debugging.

visual-studio-2013-2015-unable-to-start-debugging

Nel caso in cui abbiate recentemente installato Windows 10 vi consiglio di saltare direttamente al paragrafo Malfunzionamento dell’URL Rewrite Module, che molto probabilmente contiene le informazioni per risolvere il vostro problema. In caso contrario, continuate a leggere.

A dispetto di quanto dichiarato dal messaggio, è improbabile che avviando il progetto senza il debugger si ottengano maggiori informazioni. Fortunatamente, la problematica è piuttosto nota nell’ambiente grazie a numerose segnalazioni su siti specializzati come StackOverflow. La causa, nella maggior parte dei casi, è dovuta all’Application Pool predefinito – solitamente il DefaultAppPool – che è stato arrestato.

(altro…)

 

ASP.NET – Inserire codice HTML nei Resource File (.resx)

Abbiamo già avuto modo di parlare in passato dei Resource File di ASP.NET, strumenti fondamentali per implementare un accesso centralizzato a contenuti testuali e multimediali della nostra applicazione, soprattutto in ottica di sviluppo multilanguage (come spiegato in questo articolo). Capita spesso, sviluppando applicazioni per il web, di avere la necessità di inserire contenuto HTML all’interno del testo contenuto in una o più chiavi di risorsa, come nell’esempio mostrato nella seguente screenshot:

(altro…)

 

Unable to access the IIS metabase: come risolvere

Abbiamo già avuto modo di parlare della IIS Metabase in passato, quando abbiamo affrontato la problematica legata a come consentire l’accesso da connessioni remote (external requests) sull’istanza IIS/IIS Express di Visual Studio, ad esempio per testare applicazioni in debug-mode da dispositivi mobili. Chi ha letto l’articolo ricorderà che in quell’occasione, tra gli altri possibili workaround, abbiamo suggerito il possibile abbandono di IIS Express in favore di IIS 7.5 o superiore, una scelta che per uno sviluppatore di siti web in tecnologia .NET è prima o poi praticamente obbligata.

(altro…)

 

IIS Express: consentire l’accesso da connessioni remote (external requests)

A partire da Visual Studio 2012 il venerando web server di sviluppo Cassini è stato rimpiazzato da IIS Express. Questo cambiamento, che secondo la Microsoft ha il merito di aver notevolmente semplificato le cose ai nuovi sviluppatori, ha provocato la scomparsa – per ragioni di sicurezza – di alcune importanti opzioni di configurazione, tra cui la possibilità di cambiare il local hostname e la porta HTTP mediante la GUI (tramite la finestra Proprietà dell’applicazione web). Come se non bastasse la configurazione predefinita di IIS Express, a differenza di quella di Cassini, non consente di rispondere a request esterne, ovvero effettuate da altri dispositivi collegati tramite rete.

HTTP Error 503. The service is unavailable.

OUCH!.Don.Draper

Si tratta di una limitazione particolarmente grave, specialmente in un periodo come quello attuale in cui, stante la grande diffusione di siti responsive, pagine mobile-friendly e webapp, effettuare test su dispositivi diversi si rivela spesso un’operazione fondamentale fin dalle prime fasi dello sviluppo.

Il Problema.

I motivi che impediscono a IIS Express di rispondere a richieste esterne sono generalmente tre:

  1. Il file di configurazione predefinito, che contiene i riferimenti ad ogni applicazione web nel momento in cui questa viene attivata in Debug o in Release mode da Visual Studio.
  2. I criteri di accesso predefiniti (ACL) previsti per le connessioni al componente HTTP.SYS, che non consentono a un’applicazione dotata di privilegi standard – come Visual Studio eseguito normalmente, ovvero senza privilegi di amministratore – di gestire traffico esterno.
  3. Il Firewall di Windows (o altro firewall installato sul sistema), che con tutta probabilità non è configurato per consentire connessioni esterne in ingresso dalla porta TCP assegnata automaticamente all’applicazione web.

La Soluzione.

Vediamo come risolvere tutti questi problemi:

  • Assicuratevi di non avere istanze di Visual Studio aperte.
  • Aprite il file  %userprofile%\Documenti\IISExpress\config\applicationhost.config  , dove %userprofile% corrisponde alla cartella che ospita il profilo del vostro utente – ad esempio C:\Users\NomeUtente\
  • Cercate la entry corrispondente all’applicazione web che vogliamo modificare e cambiamo le configurazioni di binding nel seguente modo:
    <binding protocol="http" bindingInformation="*:<port>:*" /> In buona sostanza si tratta di sostituire una coppia di localhost con altrettanti asterischi, lasciando inalterata la porta assegnata automaticamente (che troverete al posto di <port>). Se avete necessità di cambiare anche quest’ultima, sostituitela con una porta TCP a piacere (es. 8080) ed eseguite anche il prossimo passaggio, in caso contrario potrete saltare direttamente allo step successivo.
  • Se avete cambiato la porta, aprite il file di progetto (.csproj) e il file di soluzione (.sln) corrispondenti alla vostra applicazione web e assicuratevi che non vi siano riferimenti alla porta precedente: è possibile che siano presenti o meno a seconda del tipo di progetto (Web Application, MVC App, Web Site, etc.).  In caso affermativo, sostituite la vecchia porta con la nuova.
  • Aprite un Prompt dei Comandi (con privilegi di Amministratore) e digitate il seguente comando:
    netsh http add urlacl url=http://*:<port>/ user=everyone Inserendo ovviamente la porta dell’applicazione web al posto di <port>. Nel caso in cui riceviate un messaggio di errore (1789) significa che il gruppo Everyone non è presente nel vostro sistema, cosa che può accadere in alcune localizzazioni di Windows. Se è il vostro caso, sostituite everyone con il nome del gruppo corrispondente. In alternativa ad effettuare questo passaggio potete provare ad eseguire Visual Studio con privilegi di amministratore.
  • Abilitate il traffico interno dell’applicazione IISExpress.exe mediante il pannello di configurazione avanzata di Windows Firewall (o altro Firewall installato) o, in alternativa, aprite il traffico interno per la porta TCP corrispondente a quella della vostra applicazione.

Una volta fatto tutto questo potrete lanciare nuovamente Visual Studio e lanciare la vostra applicazione in Debug o Release mode:  dovreste essere in grado di accedervi da qualsiasi dispositivo collegato alla vostra stessa rete al seguente indirizzo web:

http://<lan-ip-address>:<port>/

Visual Studio 2015 Update

Come giustamente indicato da Zachary Pittman (a cui vanno i nostri ringraziamenti), la versione di IIS Express installata con Visual Studio 2015 crea un file applicationhost.config specifico per ciascun progetto web: tale file si trova nella sottocartella   /.vs/ , situata all’interno della cartella principale del progetto. In ogni caso, per determinare l’esatta collocazione del file, è sempre possibile fare click con il tasto destro sull’icona di IIS Express presente nel system tray: da lì è possibile selezionare > Show all applications e visualizzare il percorso del file applicationhost.config relativo al proprio progetto.

Le Alternative.

Diciamolo pure: IIS Express, con tutte le sue limitazioni, è ben lontano dall’essere uno strumento di lavoro perfetto. Chiunque sentisse la necessità di dotarsi di un web server più completo, robusto e configurabile troverà senz’altro maggiori soddisfazioni nel passare a IIS 7.5 o superiore. Il problema è che potreste essere obbligati anche in questo caso ad eseguire Visual Studio come amministratori di sistema per non incorrere nel seguente errore:

4743_error

In quanto Visual Studio ha bisogno di accedere alla IIS metabase, privilegio negato a tutti gli account standard.

OUCH!.Don.Draper

UPDATE: In alternativa ad eseguire Visual Studio con privilegi di amministratore potete utilizzare il workaround descritto in questo articolo, che consente di impostare i permessi di accesso alla IIS Metabase per l’utente corrente in modo semplice ed efficace.

Cos’altro dire? Felice (si fa per dire) sviluppo!

EDIT: Per chiunque volesse approfondire l’argomento IIS Express e comprendere le ragioni che hanno portato la Microsoft a renderlo il successore di Cassini suggerisco questo ottimo (anche se datato) articolo di Scott Hanselman, ovviamente in inglese. Buona lettura!