Esercizio - Collegare il debugger di Visual Studio a un'app Web di Servizio app di Azure

Completato

A questo punto l'app è distribuita in Azure, ma non funziona correttamente. L'app funziona ancora in locale, quindi è difficile determinare esattamente la causa del problema senza ulteriori indagini. In Visual Studio è possibile risolvere facilmente il problema collegando il debugger al processo di Servizio app in Azure. Questo esercizio consente di eseguire il debug dell'app come se fosse in esecuzione in locale.

Nota

Prima di cercare di collegare il debugger, verificare sempre che lo stato del codice locale corrisponda a ciò che è stato distribuito in Azure. In questo modo si garantisce che i file di simboli locali e il codice sorgente siano allineati all'app distribuita. In un'app reale, se si usa Git per gestire il progetto, è preferibile eseguire il checkout dello stesso commit o della stessa versione distribuita.

Configurare le impostazioni di debug

Per la corretta esecuzione dell'operazione completare la procedura seguente in Visual Studio prima di eseguire il debug di un'app in Azure.

  1. Verificare innanzitutto di aver compilato correttamente il progetto almeno una volta. Una compilazione corretta garantisce che il codice sorgente e tutti i file compilati necessari siano pronti per l'esecuzione. Se l'applicazione è in esecuzione in locale, arrestare l'app.

  2. Passare a Debug > Opzioni nel menu di Visual Studio in alto. Assicurarsi che l'opzione Abilita Just My Code sia deselezionata e quindi selezionare OK.

    La modifica di questa impostazione consente a Visual Studio di eseguire il debug del codice ottimizzato distribuito in Azure usando i file di simboli necessari dalla cartella bin locale. I file di simboli vengono usati dal debugger come bridge tra il codice compilato in esecuzione e il codice sorgente in Visual Studio e per questo motivo è importante che il codice sorgente locale corrisponda all'app di distribuzione.

    Screenshot delle impostazioni di debug di Visual Studio.

Collegare il debugger a Servizio app di Azure

  1. Nel menu principale nella parte superiore di Visual Studio selezionare Debug > Collega a processo per aprire la finestra di dialogo corrispondente. La finestra consente di connettersi e collegarsi a destinazioni diverse. In questo caso, ci si connette all'istanza del servizio app creata nel passaggio precedente.

  2. Selezionare l'elenco a discesa Tipo di connessione e scegliere l'opzione Servizi app di Microsoft Azure.

  3. Selezionare il pulsante Trova accanto al campo Destinazione della connessione per aprire una finestra di dialogo che consente di esplorare le sottoscrizioni e i servizi app di Azure.

  4. Individuare e selezionare il servizio app di Azure GitHubBrowser123 creato nel passaggio precedente e quindi scegliere OK.

  5. Il processo w3wp.exe viene visualizzato nell'elenco dei processi a cui è possibile connettersi ed è il processo principale del servizio app di Azure che ospita l'applicazione distribuita. Selezionare tale processo e quindi scegliere Collega in basso a destra per connettere il debugger di Visual Studio.

    Screenshot delle funzionalità di Associa a processo.

  6. In Index.cshtml.cs passare alla prima riga del metodo OnPost e impostare un punto di interruzione in tale metodo facendo clic nel margine sinistro. In alternativa, fare clic con il pulsante destro del mouse e scegliere Punto di interruzione>Inserisci punto di interruzione.

    Il metodo OnPost in Index.cshtml.cs gestisce la maggior parte della logica per l'app.

  7. Facoltativamente, è anche possibile verificare che Visual Studio abbia caricato i file di simboli per la sessione di debug. Passare a Debug > Windows > Moduli per aprire la finestra Moduli. Questa finestra deve indicare che i file di simboli sono stati caricati correttamente per il file .dll del browser GitHub dopo le modifiche della configurazione di Just my code apportate in precedenza.

    Screenshot della finestra File di simboli.

Risolvere il bug

Dopo aver caricato i simboli, è possibile eseguire il debug dell'app ospitata in Azure esattamente come in locale.

  1. Dopo avere impostato il punto di interruzione in Visual Studio, passare all'app nel browser, immettere il valore dotnet nella casella di ricerca dell'app e quindi fare clic su Invia. Visual Studio raggiungerà il punto di interruzione all'interno del metodo OnPost. La prima volta la sincronizzazione può richiedere qualche minuto. Il codice proverà a recuperare il valore di GitHubUrl usando il servizio IConfiguration. Per impostazione predefinita, il servizio di configurazione carica i valori dal file appsettings.json nell'app.

  2. Usare il pulsante Esegui istruzione/routine nei controlli di debug di Visual Studio o premere F10 per passare alla riga di codice che crea searchUrl. Posizionare il cursore del mouse sopra la variabile githubUrl e osservare che il valore è attualmente null. Il codice funziona correttamente in locale, quindi perché il valore in Azure è Null?

  3. Aprire il file appsettings.json per eseguire ulteriori indagini. In questo file sono presenti alcune impostazioni di configurazione relative alla registrazione, ma non viene trovato alcun valore GitHubUrl.

  4. Apri il file appsettings.Development.json.

    Durante la configurazione del progetto di esempio sono state aggiornate le impostazioni di configurazione in appsettings.Development.json. Questo file contiene configurazioni che verranno applicate solo in fase di esecuzione durante lo sviluppo e non quando viene eseguita la distribuzione in Azure. Dimenticare di impostare le configurazioni per la versione di produzione dell'applicazione ospitata in Azure è una fonte comune di bug.

    Screenshot delle impostazioni di sviluppo dell'applicazione.

  5. Copiare la coppia chiave-valore GitHubUrl da appsettings.Development.json e incollarla nel file appsettings.json di primo livello in modo che i due file corrispondano. Il nuovo valore di configurazione verrà incluso nel file appsettings.json quando si distribuisce nuovamente l'app in Azure.

    Il file appsettings.json dovrebbe essere simile al seguente.

    Screenshot delle impostazioni dell'applicazione.

  6. Rimuovere il debugger dal servizio app premendo il pulsante di arresto nella parte superiore di Visual Studio, esattamente come in una sessione di debug locale.

  7. Per ridistribuire le modifiche apportate, fare clic con il pulsante destro del mouse sul nodo del progetto in Esplora soluzioni e quindi scegliere di nuovo Pubblica.

  8. Nella schermata del profilo di pubblicazione tutte le impostazioni di distribuzione originali sono ancora disponibili, quindi selezionare di nuovo Pubblica per eseguire la ridistribuzione in Azure.

  9. Al termine della distribuzione, in Visual Studio viene avviato un browser per visualizzare di nuovo l'app. Immettere nuovamente dotnet nel modulo di ricerca e premere INVIO. Un elenco di repository verrà ora caricato nuovamente.

    Complimenti. È stato risolto un bug in Servizio app di Azure tramite Visual Studio.