Problemi comuni che causano il riciclo dei ruoli del servizio cloud di Azure (versione classica)
Importante
Servizi cloud (versione classica) è ora deprecato per tutti i clienti a partire dal 1° settembre 2024. Eventuali distribuzioni esistenti in esecuzione saranno arrestate e chiuse da Microsoft e i dati andranno persi in modo permanente a partire da ottobre 2024. Le nuove distribuzioni devono usare il nuovo modello di distribuzione basato su Azure Resource Manager, Servizi cloud di Azure (supporto "Extended").
Questo articolo illustra alcune delle cause comuni dei problemi di distribuzione e fornisce suggerimenti per consentirne la risoluzione. La presenza di un problema con un'applicazione viene evidenziata se l'istanza del ruolo non si avvia o se lo stato passa ciclicamente da inizializzazione a occupato e arresto.
Se il problema riguardante Azure non viene risolto con le informazioni in questo articolo, visitare i forum di Azure su Microsoft Q&A e Stack Overflow. È possibile pubblicare il problema in questi forum o in @AzureSupport su Twitter. È anche possibile inviare una richiesta di supporto tecnico di Azure. Per inviare una richiesta di supporto, selezionare Supporto tecnico nella pagina del supporto di Azure.
Dipendenze di runtime mancanti
Se un ruolo nell'applicazione si basa su un'assembly che non fa parte di .NET Framework o della libreria gestita di Azure, è necessario includere tale assembly in modo esplicito nel pacchetto dell'applicazione. Tenere presente che in Azure non sono disponibili per impostazione predefinita altri framework di Microsoft. Se il ruolo si basa su un framework di questo tipo, è necessario aggiungere tali assembly al pacchetto dell'applicazione.
Prima di compilare e includere in un pacchetto l'applicazione, verificare che le affermazioni seguenti siano vere:
- Se si usa Visual Studio, assicurarsi che la proprietà Copia localmente sia impostata su True per ogni assembly di riferimento nel progetto che non fa parte di Azure SDK o .NET Framework.
- Verificare che il file web.config non faccia riferimento ad alcun assembly inutilizzato nell'elemento di compilazione.
- La proprietà Azione di compilazione di ciascun file con estensione cshtml è impostata su Contenuto. Questa impostazione garantisce che i file vengano visualizzati correttamente nel pacchetto e consente la visualizzazione anche di altri file di riferimento.
Riferimento dell'assembly alla piattaforma errata
Azure è un ambiente a 64 bit, Pertanto, gli assembly .NET compilati per una destinazione a 32 bit non sono compatibili con Azure.
Generazione di eccezioni non gestite da parte del ruolo durante l'inizializzazione o l'arresto
Eventuali eccezioni generate dai metodi della classe RoleEntryPoint, che include i metodi OnStart, OnStop e Run, sono eccezioni non gestite. Se si verifica un'eccezione non gestita in uno di questi metodi, il ruolo viene riciclato. Se il ruolo viene riciclato più volte, è possibile che venga generata un'eccezione non gestita a ogni tentativo di avvio.
Restituzioni del ruolo dal metodo Run
È previsto che il metodo Run , venga eseguito in modo illimitato. Se tramite il codice viene eseguito l'override del metodo Run , il codice deve essere sospeso per un periodo illimitato. Se tramite il metodo Run viene restituito un valore, il ruolo viene riciclato.
Impostazione di DiagnosticsConnectionString errata
Se l'applicazione usa Diagnostica di Azure, il file cscfg deve specificare l'impostazione di configurazione DiagnosticsConnectionString
. Questa impostazione deve specificare una connessione HTTPS all'account di archiviazione in Azure.
Per assicurarsi che l'impostazione DiagnosticsConnectionString
sia corretta, prima di distribuire il pacchetto dell'applicazione in Azure, verificare che le affermazioni seguenti siano vere:
- L'impostazione
DiagnosticsConnectionString
punti a un account di archiviazione valido in Azure.
Per impostazione predefinita, questa impostazione punta all'account di archiviazione emulato, pertanto è necessario modificarla in modo esplicito prima di distribuire il pacchetto dell'applicazione. Se non si modifica questa impostazione, viene generata un'eccezione quando l'istanza del ruolo tenta di avviare il monitoraggio di diagnostica. Questo evento potrebbe comportare il riciclo illimitato dell'istanza del ruolo. - La stringa di connessione viene specificata nel formatoseguente. Il protocollo deve essere specificato come HTTPS. Sostituire MyAccountName con il nome dell'account di archiviazione e MyAccountKey con la chiave di accesso dell'account:
DefaultEndpointsProtocol=https;AccountName=MyAccountName;AccountKey=MyAccountKey
Se l'applicazione viene sviluppata usando Strumenti di Azure per Microsoft Visual Studio, è possibile usare le pagine delle proprietà per impostare questo valore.
Chiave privata non inclusa nel certificato esportato
Per eseguire un ruolo Web in Transport Layer Security (TLS), è necessario assicurarsi che nel certificato di gestione esportato sia inclusa la chiave privata. Se si usa Gestione certificati di Windows per esportare il certificato, selezionare Sì per l'opzione Esporta la chiave privata. Il certificato deve essere esportato nel formato .pfx, l'unico attualmente supportato.
Passaggi successivi
Altri articoli sulla risoluzione dei problemi per i servizi cloud.
Per altri scenari di riciclo dei ruoli, vedere la serie di blog di Kevin Williamson.