Esporta (0) Stampa
Espandi tutto

Compilare un'applicazione eseguibile in un servizio cloud in Azure

Aggiornamento: ottobre 2014

Un'applicazione progettata per essere un servizio cloud in Azure è costituita da diverse risorse di calcolo che elaborano collettivamente le informazioni e interagiscono tra loro e con il mondo esterno. Un servizio cloud in Azure può contenere fino a cinque delle seguenti definizioni di ruolo:

  • Ruolo Web: componente del servizio personalizzato per la programmazione di applicazioni Web supportata da Internet Information Services (IIS) 7 e da ASP.NET. Il ruolo Web è progettato per agire da front-end del servizio cloud.

  • Ruolo di lavoro: componente del servizio utile per lo sviluppo generalizzato e in grado di eseguire l'elaborazione in background per un ruolo Web. Il ruolo di lavoro viene in genere utilizzato per le attività non interattive a esecuzione prolungata, ma è possibile utilizzarlo per ospitare qualsiasi tipo di carico di lavoro.

Le informazioni seguenti offrono utili indicazioni sull'utilizzo dei ruoli in un'applicazione:

In Microsoft Azure il ruolo Web contiene siti Web o altro codice supportato da Internet Information Services (IIS). In genere si tratta di una pagina ASPX o di un servizio Web, ma per fornire i propri servizi è possibile utilizzare altri strumenti di sviluppo Web, ad esempio un preprocessore di ipertesto (PHP). Un ruolo Web ASP.NET in Azure è simile a un'applicazione web ASP.NET per il fatto che viene compilato con file aspx e codice sorgente, ma include strumenti aggiuntivi che ne consentono l'esecuzione nell'ambiente di Azure. Per ulteriori informazioni sui progetti Web ASP.NET, vedere Progetti Web ASP.NET.

Un ruolo Web può inoltre ospitare la maggior parte delle applicazioni nelle quali viene utilizzato il protocollo HTTP, ad esempio un servizio WCF, tramite lo schema basicHttpBinding. Per ulteriori informazioni, vedere basicHttpBinding. Gli strumenti di Azure per Microsoft Visual Studio forniscono modelli per semplificare la creazione di applicazioni che rientrano in questi scenari. Per scaricare tali strumenti, vedere la pagina dei download di Azure.

La differenza principale tra un ruolo Web e un ruolo di lavoro è il supporto per IIS. Il ruolo Web è progettato per presentare un'interfaccia tramite siti e applicazioni Web ospitati in IIS. Per contro, il ruolo di lavoro è flessibile ed espandibile. La maggior parte dei tipi di applicazioni può essere ospitata in un ruolo di lavoro, inclusi i tipi nei quali vengono utilizzati linguaggi non .NET o eseguito codice non gestito.

Di seguito sono riportate alcune delle differenze:

  • Il ruolo Web fornisce il supporto per presentare un front-end rivolto all'utente tramite IIS. Sebbene sia possibile scrivere codice per presentare un'interfaccia utente utilizzando un ruolo di lavoro, il ruolo Web facilita la creazione di questo tipo di applicazione.

  • Nel ruolo Web l'efficienza di threading viene gestita da IIS. Nel ruolo di lavoro è necessario gestire i problemi di threading manualmente.

  • Per iniziare l'elaborazione è necessario fornire un metodo di esecuzione da chiamare.

  • Il perimetro di sicurezza è diverso tra il ruolo Web e il ruolo di lavoro. Nel ruolo Web gli elenchi di controllo di accesso (ACL) per i certificati sono configurati per il supporto di IIS e dei servizi di rete per impostazione predefinita. Quando si utilizza un ruolo di lavoro è necessario impostare gli ACL per supportare le autorizzazioni richieste dell'applicazione.

I tipi di attività per i quali un ruolo di lavoro viene in genere utilizzato sono:

  • Attività con esecuzione prolungata e sincrone che l'utente non deve attendere.

  • Hosting di servizi applicazione che non richiedono un'interfaccia utente.

  • Servizi in background in attesa di una coda.

  • Esecuzione di servizi basati su TCP.

  • Processi a elevato utilizzo di risorse di calcolo.

In Azure SDK è possibile utilizzare IIS con i ruoli Web. Quando si crea un'applicazione per Azure, questa viene configurata in modo da utilizzare le funzionalità complete di IIS. Per ulteriori informazioni sui ruoli Web e IIS, vedere Configurare un server Web per rendere disponibile contenuto (IIS 7).

I ruoli Web includono:

  • Supporto per più siti e applicazioni Web in un'unica istanza del ruolo Web. Per ulteriori informazioni sulla configurazione del ruolo Web per ospitare più siti, vedere Configurare un ruolo Web per più siti Web.

  • Scripting delle attività di configurazione di avvio. Per ulteriori informazioni sulle attività di avvio, vedere Configurare i componenti di IIS in Azure.

  • Esecuzione di siti e applicazioni Web direttamente in IIS.

  • Utilizzo dei domini di applicazione nel modo IIS standard.

È possibile gestire la modalità di risposta del ruolo quando viene avviato, eseguito o arrestato in Azure utilizzando le informazioni riportate di seguito:

La classe RoleEntryPoint include metodi che vengono chiamati da Azure per l'avvio, l'esecuzione o l'arresto di un ruolo Web o di lavoro. È possibile eseguire facoltativamente l'override di questi metodi per gestire l'inizializzazione del ruolo, sequenze di arresto del ruolo o il thread dell'esecuzione del ruolo. Un ruolo di lavoro deve estendere la classe RoleEntryPoint. Per i ruoli Web, l'estensione di RoleEntryPoint è facoltativa.

Quando si estende RoleEntryPoint, è necessario tenere presenti i seguenti comportamenti dei metodi:

  • I metodi OnStart e OnStop restituiscono un valore booleano, pertanto è possibile che restituiscano false.

    Se il codice restituisce false, il processo del ruolo viene terminato bruscamente, senza eseguire la sequenza di arresto eventualmente impostata. In generale è consigliabile evitare la restituzione di false dal metodo OnStart.

  • Le eccezioni non rilevate all'interno di un overload di un metodo RoleEntryPoint vengono trattate come eccezioni non gestite.

    Se si verifica un'eccezione all'interno di uno dei metodi del ciclo di vita, in Azure viene generato l'evento UnhandledException e il processo viene interrotto. Quando il ruolo viene portato offline, viene riavviato da Azure. Quando si verifica un'eccezione non gestita, l'evento Stopping non viene generato e il metodo OnStop non viene chiamato.

Se il ruolo non viene avviato o passa in modo ciclico tra gli stati di inizializzazione, occupato e in arresto, è possibile che il codice stia generando un'eccezione non gestita in uno degli eventi del ciclo di vita ogni volta che il ruolo viene riavviato. In questo caso utilizzare l'evento UnhandledException per determinare la causa dell'eccezione e gestirla opportunamente. È inoltre possibile che il ruolo venga restituito dal metodo Run, la qual cosa provoca il riavvio del ruolo. Per ulteriori informazioni sugli stati di distribuzione, vedere Problemi comuni che causano il riciclo dei ruoli.

noteNota
Se si utilizzano gli Strumenti di Azure per Microsoft Visual Studio per sviluppare l'applicazione, i modelli di progetto del ruolo estendono automaticamente la classe RoleEntryPoint nei file WebRole.cs e WorkerRole.cs.

È possibile influire sul ciclo di vita di un ruolo utilizzando i metodi seguenti della classe RoleEntryPoint:

Il metodo OnStart viene chiamato quando l'istanza del ruolo viene portata online da Azure. Mentre il codice OnStart viene eseguito, l'istanza del ruolo viene contrassegnata come occupata e dal bilanciamento del carico non vi verrà indirizzato alcun traffico esterno. È possibile eseguire l'override di questo metodo per effettuare operazioni di inizializzazione, ad esempio implementare i gestori eventi e avviare la Diagnostica Microsoft Azure. Per altre informazioni sulla diagnostica, vedere Raccogliere dati di registrazione utilizzando Diagnostica Azure.

Se OnStart restituisce true, l'istanza viene inizializzata correttamente e il metodo RoleEntryPoint.Run viene chiamato da Azure. Se OnStart restituisce false, il ruolo termina immediatamente, senza eseguire le sequenze di arresto pianificate.

Nell'esempio di codice seguente viene illustrato come eseguire l'override del metodo OnStart. Con questo metodo viene configurato e avviato un monitor di diagnostica all'avvio dell'istanza del ruolo, nonché impostato il trasferimento dei dati di registrazione in un account di archiviazione:


public override bool OnStart()
{
    var config = DiagnosticMonitor.GetDefaultInitialConfiguration();

    config.DiagnosticInfrastructureLogs.ScheduledTransferLogLevelFilter = LogLevel.Error;
    config.DiagnosticInfrastructureLogs.ScheduledTransferPeriod = TimeSpan.FromMinutes(5);

    DiagnosticMonitor.Start("DiagnosticsConnectionString", config);

    return base.OnStart();
}

Il metodo OnStop viene chiamato dopo che un'istanza del ruolo è stata portata offline da Azure e prima della chiusura del processo. È possibile eseguire l'override di questo metodo per chiamare il codice necessario affinché l'istanza del ruolo effettui un arresto normale.

ImportantImportante
Il codice del metodo OnStop dispone di un tempo di completamento limitato quando viene chiamato per motivi diversi da un arresto avviato dall'utente. Trascorso tale tempo, il processo viene terminato, pertanto è necessario assicurarsi che il codice del metodo OnStop possa essere eseguito rapidamente o tolleri il mancato completamento. Il metodo OnStop viene chiamato dopo che l'evento Stopping viene generato.

È possibile eseguire l'override del metodo Run per implementare un thread a esecuzione prolungata per l'istanza del ruolo.

L'override del metodo Run non è obbligatorio; l'implementazione predefinita avvia un thread in costante stato di sospensione. Se si esegue l'override del metodo Run, il codice dovrebbe bloccarsi in modo indefinito. Se il metodo Run restituisce un valore, il nuovo ciclo del ruolo inizia in modo automatico e normale; in altri termini, l'evento Stopping viene generato e il metodo OnStop viene chiamato da Azure per consentire l'esecuzione delle sequenze di arresto prima che il ruolo venga portato offline.

È possibile utilizzare i metodi del ciclo di vita di ASP.NET, oltre a quelli forniti dalla classe RoleEntryPoint, per gestire le sequenze di inizializzazione e di arresto di un ruolo Web. Questa scelta può essere utile per motivi di compatibilità se si trasferisce un'applicazione ASP.NET esistente ad Azure. I metodi del ciclo di vita di ASP.NET vengono chiamati dall'interno dei metodi RoleEntryPoint. Il metodo Application_Start viene chiamato al termine del metodo RoleEntryPoint.OnStart. Il metodo Application_End viene chiamato prima del metodo RoleEntryPoint.OnStop.

Uno dei modelli applicativi più comuni in Azure prevede che un ruolo Web riceva le richieste in entrata e quindi utilizzi le code di Azure per passarle a istanze di un ruolo di lavoro per l'elaborazione. Il ruolo di lavoro effettua ricerche periodiche nella coda dei messaggi per verificare se esistano attività da eseguire. In caso affermativo, esegue le attività. Il ruolo Web in genere recupera il lavoro completato dall'archivio permanente, ad esempio un BLOB o una tabella. Nella figura seguente viene illustrato questo tipico modello di progettazione.

Comunicazione dei ruoli tramite code

Per ulteriori informazioni sull'utilizzo dei servizi di archiviazione, vedere Archiviazione.

Mostra:
© 2014 Microsoft