Risolvere i problemi di mancato avvio delle istanze del ruolo di Servizi cloud di Azure (supporto "Extended")
Questo articolo illustra come risolvere gli errori di avvio nelle istanze del ruolo di Azure Servizi cloud (supporto esteso).
Elenco di controllo per la risoluzione dei problemi
Scegliere tra le opzioni seguenti per diagnosticare i problemi che si verificano nelle istanze del ruolo.
Opzione 1: Disattivare gli errori personalizzati
Per visualizzare informazioni complete sull'errore, aprire il file Web.config per il ruolo Web, impostare la modalità di errore personalizzata su Off
e quindi ridistribuire il servizio:
In Visual Studio aprire la soluzione.
In Esplora soluzioni aprire il file Web.config.
system.web
Nella sezione aggiungere il codice XML seguente:<customErrors mode="Off" />
Salvare il file.
Ricreare il pacchetto e ridistribuire il servizio.
Dopo la ridistribuitura del servizio, i messaggi di errore che potrebbero essere ricevuti sul servizio includeranno i nomi di assembly o DLL mancanti.
Opzione 2: Usare PowerShell per visualizzare lo stato dell'istanza del ruolo
Per ottenere informazioni sullo stato di runtime dell'istanza del ruolo, eseguire il cmdlet Get-AzCloudServiceRoleInstanceView :
$roleInstanceView = @{
CloudServiceName = "<cloud-service-name>"
ResourceGroupName = "<resource-group-name>"
RoleInstanceName = "WebRole1_IN_0"
}
Get-AzCloudServiceRoleInstanceView @roleInstanceView
Lo stato dell'istanza del ruolo è elencato nella prima colonna, come illustrato nell'output di esempio seguente:
Statuses PlatformFaultDomain PlatformUpdateDomain
-------- ------------------- --------------------
{RoleStateStarting} 0 0
Opzione 3: Usare il portale di Azure per visualizzare lo stato dell'istanza del ruolo
Per visualizzare le informazioni sullo stato di un'istanza del ruolo nel portale di Azure, seguire questa procedura:
Nella portale di Azure cercare e selezionare Servizi cloud (supporto esteso).
Nell'elenco dei servizi cloud selezionare il nome del servizio cloud.
Nel riquadro dei menu cercare in Impostazioni e quindi selezionare Ruoli e istanze.
Selezionare il nome dell'istanza del ruolo.
Nel riquadro dell'istanza del ruolo prendere nota dello stato dell'istanza del ruolo nel campo Stato .
Opzione 4: Usare Desktop remoto per visualizzare le informazioni sugli errori
Per accedere al ruolo e visualizzare informazioni complete sull'errore, usare Remote Desktop Protocol (RDP) seguendo questa procedura:
Aggiungere l'estensione Desktop remoto per Azure Servizi cloud (supporto esteso).
Nella portale di Azure, quando l'istanza del servizio cloud mostra uno stato Pronto, usare Desktop remoto per accedere al servizio cloud. Per altre informazioni, vedere Connettersi alle istanze del ruolo tramite Desktop remoto.
Accedere alla macchina virtuale usando le credenziali usate per configurare Desktop remoto.
Aprire una finestra Prompt dei comandi.
Eseguire il comando ipconfig . Copiare il valore restituito per l'indirizzo IPv4.
Aprire un Web browser.
Nella barra degli indirizzi incollare l'indirizzo IPv4 e quindi aggiungere una barra e il nome del file predefinito dell'applicazione Web. Ad esempio:
http://<ipv4-address>/default.aspx
.
Se si passa ora al sito Web, verranno visualizzati messaggi di errore che contengono altre informazioni. Ecco un esempio:
Errore del server nell'applicazione '/'.
Impossibile caricare il file o l'assembly 'Microsoft.WindowsAzure.StorageClient, Version=1.1.0.0, Culture=neutral, PublicKeyToken=<16-digit-esadecimale-string>' o una delle relative dipendenze. Non è possibile trovare il file specificato.
Descrizione: si è verificata un'eccezione non gestita durante l'esecuzione della richiesta Web corrente. Per altre informazioni sull'errore e sul suo punto di origine nel codice, vedere l'analisi dello stack.
Dettagli eccezione: System.IO.FileNotFoundException
Opzione 5: Usare l'emulatore di calcolo
È possibile usare l'emulatore di calcolo di Azure per diagnosticare e risolvere i problemi relativi alle dipendenze mancanti e agli errori Web.config . Per ottenere risultati ottimali quando si usa questo metodo per diagnosticare i problemi, usare un computer o una macchina virtuale con un'installazione pulita di Windows.
Per diagnosticare i problemi usando l'emulatore di calcolo di Azure:
Nel computer di sviluppo compilare il progetto di servizio cloud.
In Esplora file, nel progetto di servizio cloud passare alla cartella bin\debug.
Copiare la cartella csx e il file con estensione cscfg nel computer in uso per eseguire il debug dei problemi.
Nel computer pulito aprire una finestra del prompt dei comandi di Azure SDK.
Al prompt dei comandi eseguire il comando seguente
csrun
:csrun.exe /devstore:start
Esegui questo comando:
run csrun <path-to-.csx-folder> <path-to-.cscfg-file> /launchBrowser
All'avvio del ruolo, nel Web browser vengono visualizzate informazioni dettagliate sull'errore.
Se è necessaria una diagnosi maggiore, è possibile usare gli strumenti standard per la risoluzione dei problemi di Windows.
Opzione 6: Usare IntelliTrace
Note
Non è possibile usare IntelliTrace in Visual Studio 2022. IntelliTrace è ancora disponibile se si usa Visual Studio 2019, 2017 o 2015.
Per i ruoli di lavoro e Web che usano .NET Framework 4, è possibile usare IntelliTrace. IntelliTrace è disponibile in Visual Studio Enterprise.
Per distribuire il servizio cloud mentre IntelliTrace è attivato:
Verificare che sia installato Azure SDK 1.3 o versione successiva.
In Visual Studio distribuire la soluzione. Quando si configura la distribuzione, selezionare la casella di controllo Abilita IntelliTrace per i ruoli .NET 4.
Dopo l'avvio dell'istanza del ruolo, aprire Esplora server.
Espandere il nodo Azure\Servizi cloud.
Per elencare le istanze del ruolo, espandere la distribuzione. Fare quindi clic con il pulsante destro del mouse su un'istanza del ruolo.
Selezionare Visualizza log IntelliTrace.
In Riepilogo IntelliTrace passare a Dati eccezioni ed espandere tale nodo.
Nell'elenco delle eccezioni cercare una riga contenente un valore di colonna Type di System.IO.FileNotFoundException. Il valore della colonna Message corrispondente dovrebbe essere simile al testo seguente:
Impossibile caricare il file o l'assembly 'Microsoft.WindowsAzure.StorageClient, Version=1.1.0.0, Culture=neutral, PublicKeyToken=<16-digit-esadecimale-string>' o una delle relative dipendenze. Non è possibile trovare il file specificato.
Causa 1: L'operazione del servizio cloud ha esito negativo a causa di RoleInstanceStartupTimeoutError
Una o più istanze del ruolo in Azure Servizi cloud (supporto esteso) potrebbero essere lente per l'avvio. In alternativa, l'istanza del ruolo potrebbe essere riciclata o bloccata in uno stato occupato e non iniziare come previsto. In questa situazione viene visualizzato il messaggio di errore dell'applicazione RoleInstanceStartupTimeoutError
ruolo.
L'applicazione del ruolo contiene due parti che potrebbero causare il riciclo dei ruoli:
- Attività di avvio
- Codice del ruolo (implementazione di RoleEntryPoint)
Se il ruolo si arresta, l'agente PaaS (platform as a service) lo riavvia.
Per determinare se il problema è causato da un'attività di avvio, seguire questa procedura:
Provare a usare Desktop remoto per connettersi all'istanza del ruolo che presenta problemi.
Dopo la connessione all'istanza del ruolo, selezionare Avvia e quindi cercare e selezionare Gestione attività.
Per visualizzare un elenco dei processi, selezionare la scheda Dettagli in Gestione attività.
Controllare se sono presenti processi per WaIISHost.exe (per un webrole) o WaWorkerHost.exe (per un ruolo di lavoro). Se entrambi questi processi mancano, è probabile che un'attività di avvio presenti problemi.
È stato possibile verificare che il problema è causato da un'attività di avvio? In tal caso, è possibile applicare la soluzione seguente. Tuttavia, la soluzione è disponibile solo se l'attività di avvio è un'attività semplice o in primo piano. La soluzione non si applica alle attività di avvio in background. Queste vengono eseguite in modo asincrono, in parallelo con l'avvio del ruolo.
Soluzione: eseguire il debug dello script dell'attività di avvio
Per risolvere un errore dell'attività di avvio, eseguire il debug dello script eseguito durante l'avvio della macchina virtuale. Questo script dell'attività di avvio è il file Startup.cmd. Per analizzare i problemi nello script, è possibile scegliere tra le opzioni seguenti:
Visualizzare il file di log C:\Risorse\WaHostBootstrapper.log. Questo file è il log per il processo di WaHostBootstrapper.exe . Questo processo è responsabile delle attività di avvio. Viene descritto nel flusso di lavoro dell'architettura della macchina virtuale classica di Windows Azure. Cercare quindi eventuali errori o eccezioni che comportano l'esecuzione di Startup.cmd. Verificare in particolare se il codice di uscita è 0. Se non lo è, l'attività di avvio è stata completata ma presenta errori. Se non sono presenti log correlati al codice di uscita per lo script, l'attività di avvio è ancora in esecuzione.
Se lo script dell'attività di avvio non può essere eseguito liberamente nell'ambiente di produzione a causa dell'impatto aziendale previsto, personalizzare il meccanismo di registrazione nella riga di comando. Ad esempio, è possibile reindirizzare l'output delle informazioni sulla chiave in un comando dello script verso un file. Un modo per eseguire questa operazione consiste nell'accodare
> "%TEMP%\StartupLog.txt"
alla fine del comando.Nella riga di comando eseguire manualmente lo script dell'attività di avvio. Le posizioni di questo script per i ruoli WebRole o WorkerRole sono illustrate nella tabella seguente.
Ruolo Posizione degli script WebRole E:\approot\bin\Startup.cmd WorkerRole E:\approot\Startup.cmd
Causa 2: MANCANO DLL o assembly
Le istanze del ruolo e le istanze del ruolo che non rispondono che possono essere causate da DLL o assembly mancanti.
Ecco alcuni sintomi di DLL o assembly mancanti:
L'istanza del ruolo scorre gli stati Inizializzazione, Occupato e Arresto .
L'istanza del ruolo è stata spostata nello stato Pronto , ma la pagina non è visibile nell'applicazione Web.
Se un sito Web viene distribuito in un ruolo Web e manca una DLL, potrebbe essere visualizzato il messaggio di errore di runtime del server seguente.
Errore del server nell'applicazione '/'.
Errore di runtime
Descrizione: si è verificato un errore dell'applicazione nel server. Le impostazioni di errore personalizzate correnti per questa applicazione impediscono la visualizzazione remota dei dettagli dell'errore dell'applicazione (per motivi di sicurezza). Potrebbe tuttavia essere visualizzato dai browser in esecuzione nel computer server locale.
Dettagli: per consentire la visualizzazione dei dettagli di questo messaggio di errore specifico nel computer remoto, creare un tag con un
<customErrors>
file di configurazione "web.config" che si trova nella directory radice dell'applicazione Web corrente. Questo<customErrors>
tag deve quindi avere il relativo attributo "mode
" impostato su "Off
".
Soluzione: risolvere DLL e assembly mancanti
Per risolvere gli errori di DLL e assembly mancanti:
In Visual Studio aprire la soluzione.
In Esplora soluzioni aprire la cartella Riferimenti.
Selezionare l'assembly identificato nel messaggio di errore.
In Proprietà impostare la proprietà Copy Local su True.
Ridistribuire il servizio cloud.
Dopo aver verificato che gli errori non vengano più visualizzati, ridistribuire il servizio. Quando si configura la distribuzione, non selezionare la casella di controllo Abilita IntelliTrace per i ruoli .NET 4.
Passaggi successivi
- Informazioni su come risolvere i problemi del ruolo del servizio cloud utilizzando i dati di diagnostica del computer di Azure PaaS.
Ulteriori informazioni
Per informazioni sulla configurazione iniziale, l'esecuzione e gli esempi di attività di avvio nel servizio cloud classico, vedere gli articoli seguenti:
- Come configurare ed eseguire attività di avvio per un servizio cloud di Azure (versione classica)
- Attività di avvio di Common Cloud Service (versione classica)
Contattaci per ricevere assistenza
In caso di domande o bisogno di assistenza, creare una richiesta di supporto tecnico oppure formula una domanda nel Supporto della community di Azure. È possibile anche inviare un feedback sul prodotto al feedback della community di Azure.