Il presente articolo è stato tradotto automaticamente.

Siti Web di Azure

Formazione dal cloud

James Chambers

Scaricare il codice di esempio

Questo è un momento emozionante per essere uno sviluppatore Web. Il compito to-end di creazione di un progetto e distribuendolo a un endpoint Web pubblico è veramente una sfida che una volta era scoraggiante, forse addirittura proibitivo. Ancora oggi si erge come uno dei computing "risolto" sfide.

Con poche risorse, è possibile scaricare un IDE libero e strumenti di controllo di origine. È possibile avviare un progetto e distribuirlo ad una ricca infrastruttura, mantenuta per voi senza bisogno di accesso o conoscenza dell'hardware. Si può avere il progetto ospitato gratuitamente per iniziare.

Dobbiamo lavorare con i blocchi di costruzione sono più completi che mai — se PHP, Java o Microsoft .NET Framework. Ora possiamo concentrarci sull'UX invece di gestione progetto, networking, storage, procedure di distribuzione o scalabilità.

FrontClass, l'applicazione di trattati in questo articolo, è qualcosa che decenni fa sarebbe stato settimane di lavoro, se non di più. Sarebbe stato difficile ottenere lavoro in tutti gli ambienti. Distribuzione sarebbe stato un incubo. E, molto probabilmente, non sarebbe stato in grado di risolvere la scalabilità in quel lasso di tempo. Oggi, posso compilare il progetto e distribuirlo ore e pronto a scala. La soluzione scaricabile contiene il codice sorgente completo e funzionante, che è possibile distribuire senza dover modificare il proprio account Microsoft Azure.

Ho iniziato a FrontClass mentre volontariato presso una locale scuola media, insegnando la programmazione per bambini di età 10-14. Volevo condividere contenuti con gli studenti in modo che potessi controllare il ritmo, ma lasciate che li passi tornare alla precedente su richiesta. Ci sono tre aree funzionali dell'applicazione che aiutano un insegnante di condurre una classe: composizione di lezione, partecipazione di allievo e di istruzione di aula. Potrai abbattere ognuna di queste aree, ma, naturalmente, c'è qualche sovrapposizione.

Basi del progetto

Per compilare l'applicazione, io uso Visual Studio 2013 Update 2. Utilizzerò anche l'applicazione Web ASP.NET quando si crea la soluzione e il modello MVC ASP.NET . Il progetto ha generato dal modello utilizzerà il popolare framework Bootstrap di front-end per lo styling e alcune funzionalità dell'interfaccia utente.

Per abilitare le funzionalità in tempo reale, io aggiungo i pacchetti SignalR e utilizzare utensili ormai ben noto a Visual Studio. Io uso anche le librerie jQuery necessarie sulle pagine client. Potrai configurare il Entity Framework (EF) per utilizzare il database locale di default in sviluppo­mento ambiente, ma quando a distribuire ai siti Web di Azure, sarò con Database SQL Azure come archivio dati. Iniziare l'intero progetto, tuttavia, nel portale Azure (portal.azure.com), dove io posso configurare il mio target di distribuzione.

Creare il sito Web di Azure all'angolo inferiore sinistro del portale, fare clic su nuovo e selezionare il sito Web + SQL template, come mostrato Figura 1. Azure creerà una serie di risorse collegate. Selezionare un nome appropriato per questo gruppo e il nome dell'applicazione. Posso scegliere di creare un nuovo server di database o selezionare uno esistente sul mio conto per creare il database per il mio sito. Si consiglia di avere il database e il sito Web della stessa zona per ridurre i tempi di traffico di rete.

Create a New Azure Web Site with Linked Database
Figura 1 creare un nuovo sito Web azzurre con Database collegato

Nel mio caso, ho chiamato il gruppo di risorse e-learning, il database di FrontClass_DB e il sito FrontClass. È necessario scegliere un nome unico sito. Una volta di provisioning, ottengo il frontclass.azurewebsites. netto hostname e la mia destinazione di distribuzione è pronto ad ospitare il mio sito.

Nonostante l'aspetto degli avvenimenti magici, non c'è davvero molto che dovrebbe sorprenderti qui. Ho creato una voce DNS, mappato un nome host a indirizzo IP e fatto alcune opzioni di configurazione come documenti predefiniti e stringhe di connessione. Queste sono essenzialmente le cose che vuoi fare in IIS dietro le quinte per ottenere il vostro sito in esecuzione. Così, ancora una volta, non è magico, ma è abbastanza comodo. Ci sono anche alcuni strumenti di tipo infrastruttura come origine controllo e distribuzione di script disponibili per aiutare a iniziare.

Creare la soluzione successivamente, in Visual Studio testa e selezionare la suddetta applicazione Web ASP.NET come base per la mia soluzione. Come scegliere il tipo di progetto per creare — utilizzando il modello MVC ASP.NET — ricevo anche opzioni per creare le risorse correlate su Azure. Ho già creato il sito e il database attraverso il portale, quindi deselezionare la casella di controllo e procedere con la creazione del sito.

Comporre i moduli del corso

A causa dell'ambito di questo progetto, sono in grado di mantenere un modello di dati abbastanza semplice. Uso EF6 per creare i modelli tramite il primo codice, che lascia la porta aperta per modifiche nella strada utilizzando le migrazioni dati. Il risultato finale, mostrato Figura 2, è un semplice insieme di classi che rappresentano le strutture del corso, modulo e passo.

The Basic Application Data Model
Figura 2 il modello di applicazione di base dati

C'è un po ' di cerimonia di camminare attraverso per ottenere tutti i cablaggi dove lo voglio. Vale a dire, ho voglia di utilizzare un unico database, io voglio essere in grado di controllare quando le migrazioni sono generate e mi vuole la mia applicazione per eseguire automaticamente qualsiasi eccezionali migrazioni all'avvio dell'applicazione.

Questo mi permette di controllare in modo esplicito le modifiche che appaiono in ogni migrazione. Permette anche la mia applicazione aggiornarsi senza intervento. Sarà anche istituito un mezzo per pre-popolare il database con il ruolo di amministratore e il ruolo di istruttore (il primo e solo utente amministrativo) tramite l'override del seme sulla classe Configuration.

Specificare una stringa di connessione Entity Framework mi permette di utilizzare lo stesso database con diversi contesti e migrazioni all'interno di una stringa di connessione singola. Chiamando il costruttore della classe base e passando in un nome, il quadro avrà un aspetto primo per l'applicazione o la configurazione Web per vedere se c'è una stringa di connessione definita dallo stesso nome. Se è così, utilizzerà per effettuare la connessione.

Storia di migrazione per ogni contesto è mantenuto da registrazione lo spazio dei nomi come parte del processo di aggiornamento. Questo aiuta il mio migrazioni eseguire indipendentemente uno da altro. Per impostare questa funzione, aggiunto un costruttore predefinito per la mia classe di contesto come segue:

public FrontClassContext()
  : base("DefaultConnection") { }

Se si guarda il contesto creato come parte del modello di progetto che si trova nel file IdentityModels.cs, vedrete che c'è un costruttore predefinito simili presente. Esso è leggermente modificato per riflettere la natura della classe base IdentityDbContext, ma ancora utilizza la stringa di connessione DefaultConnection dal file Web. config.

Abilitare le migrazioni generato la classe configuration per le entità create eseguendo il seguente comando dalla Console Gestione pacchetti in Visual Studio:

Enable-Migrations -ContextTypeName FrontClass.DAL.FrontClassContext

Questo illumina le migrazioni per il mio corso -­relative entità. Voglio fare lo stesso per il ApplicationDbContext, pure. Potrei eseguire nuovamente quel comando con il nome di classe lo swapping. Tuttavia, quando attivata la configurazione, migrazioni e semina nel contesto in cui sono memorizzati i conti, non voglio sovrascrivere la classe di configurazione precedentemente messo. Invece, specificare una directory alternativa per le migrazioni, come segue, con le migrazioni­Directory parametro passato nel comando:

 

Enable-Migrations -ContextTypeName FrontClass.Models.ApplicationDbContext -MigrationsDirectory:"Models\AccountMigrations"

Aggiungi le prime migrazioni il passo successivo è semplicemente impalcature le classi Entity Framework eseguirà. Utilizzare il seguente comando due volte, una volta per ogni DbContext per cui vorrei creare una migrazione:

Add-Migration Initial-Model -ConfigurationTypeName FrontClass.Migrations.Configuration
Add-Migration Initial-Model -ConfigurationTypeName FrontClass.Models.AccountMigrations.Configuration

Ancora una volta, lavorando con più contesti aggiunge un po' di complessità perché è necessario specificare il parametro ConfigurationTypeName. In caso contrario, questa è un'operazione semplice.

Impostare la strategia di inizializzazione del Database per configurare EF per eseguire automaticamente il mio migrazioni, ho bisogno di dire a quale strategia utilizzare prima di effettuare qualsiasi accesso al database. Senza farlo, ricevo messaggi di eccezione in fase di esecuzione che indicano che il mio modello è sincronizzato con il database. Ogni modifica alle mie classi interessa l'hash calcolato del mio modello di dati, che viene registrato nel database.

Nel mio asax ho aggiunto le seguenti due righe di codice per utilizzare l'inizializzatore di MigrateDatabaseToLatestVersion:

Database.SetInitializer<ApplicationDbContext>(
  new MigrateDatabaseToLatestVersion
    <ApplicationDbContext, 
     FrontClass.Models.AccountMigrations.Configuration>());
Database.SetInitializer<FrontClassContext>(
  new MigrateDatabaseToLatestVersion
    <FrontClassContext, FrontClass.Migrations.Configuration>());

Si noti che sto chiamando il metodo SetInitializer generico che accetta il contesto che voglio configurare. Nel mio caso, le mie lezioni di configurazione sono simili-chiamato così ho specificato i nomi di classe completamente namespaced.

Le tabelle di semi alla prima esecuzione, voglio essere in grado di fornire un'esperienza che lascia qualcuno "accedi" e iniziare a utilizzare l'app. Ho potuto creare un controller di eseguire-una volta simile a quello che si troverebbe in applicazioni di blogging popolare. Un'altra opzione consiste nell'utilizzare i metodi del seme nelle mie classi di configurazione. Il seme viene passato in un'istanza del contesto appropriato, dal quale io posso manipolare le tabelle.

Con identità ASP.NET 2.0, ricevo anche un ricco set di classi che sono compatibili EF. Questo mi permette di iniettare in modo condizionale il ruolo e l'utente nel database, come sto facendo io Figura 3.

Figura 3 semina il primo ruolo e utente amministrativo

if (!context.Roles.Any(r => r.Name == 
  FrontClass.MvcApplication.AdministratorRoleName))
{
  var roleStore = new RoleStore<IdentityRole>(context);
  var roleManager = new RoleManager<IdentityRole>(roleStore);
  var identityRole = new IdentityRole 
    {Name = FrontClass.MvcApplication.AdministratorRoleName};
  roleManager.Create(identityRole);
}
var instructorName = "instructor@contonso.com";
if (!context.Users.Any(u => u.UserName == instructorName))
{
  var userStore = new UserStore<ApplicationUser>(context);
  var userManager = new UserManager<ApplicationUser>(userStore);
  var applicationUser = 
    new ApplicationUser { UserName = instructorName };
  userManager.Create(applicationUser, "init_2014");
  userManager.AddToRole(applicationUser.Id, 
    FrontClass.MvcApplication.AdministratorRoleName);
}

Io ho seminato anche le tabelle relative al modulo con alcuni dati di esempio, che potete vedere nel download che accompagna questo articolo. Quando si avvia l'applicazione, io posso accedere con la username instructor@contonso.com utilizzando la password init_2014. A questo punto, ho il mio strutture dati in luogo, l'applicazione è configurata con più contesti di utilizzare lo stesso database e ho un utente amministrativo — il conto istruttore — che può accedere.

Funzionalità di Editing di base l'ultimo pezzo necessaria per consentire la composizione effettiva del corso è di fornire la crea, leggere, aggiornare ed eliminare le funzionalità (CRUD). Creo una nuova area denominata amministrazione nella root del mio progetto e utilizzare gli strumenti built-ponteggi per costruire l'interfaccia utente. Infine, a creare un controller di Admin con un'azione di indice e una vista che fornisce link a corso manutenzione, moduli e passaggi.

Istruire il corso

Come istruttore, si può scegliere un corso dalla vista stessa amministrazione, da cui si sarebbe poi sceglie un modulo. Ognuno dei passaggi vengono visualizzati nella pagina del modulo successivo, come si può vedere Figura 4. È possibile inviare qualsiasi passo a qualsiasi studente in aula virtuale con un'anteprima dei contenuti disponibili all'istruttore.

Conduct the Class
Figura 4 condotta classe

Gli studenti potrebbero essere in una sessione di conferenza, in un'aula con istruttore, o diffuse in tutto il mondo. Un contesto in cui si potrebbe utilizzare questa applicazione sarebbe un'aula virtuale dal vivo, online con decine o addirittura centinaia di studenti. Voglio assicurare che indipendentemente da quanto potrebbe essere necessario adattare l'applicazione, non si perde la possibilità di scalare. Quindi devo considerare come il payload di lezione effettivamente ottenere allo studente.

È possibile creare i passaggi all'interno di un modulo di corso come testo normale o HTML, e ogni passo può essere una lunghezza arbitraria. SignalR fa un grande lavoro di movimentazione meccanica di negoziare il trasporto (con WebSockets, eventi inviate dal server, tempo di polling o per sempre il telaio) e astrae la necessità di preoccuparsi per la serializzazione del messaggio.

In definitiva, per rimanere scalabile, devo mantenere piccoli i miei messaggi. Questo è quello di minimizzare la domanda sulle risorse del server, ridurre i costi della serializzazione, lasciare che il browser del client sfruttare parti di infrastrutture come la memorizzazione nella cache e utilizzare SignalR nella stessa vena del suo design: per la segnalazione.

Il modo migliore per raggiungere questo obiettivo è semplicemente inviare un messaggio al client dicendo, "nuovo contenuto è disponibile qui", anziché inviare il passo di lezione intero lungo. Si consideri il seguente messaggio serializzato come ricevuto dal cliente il JSON qui:

{"H":"ModuleStepHub", "M":"updateStep",
  "A":["\n<h1>Welcome to the course!</h1><p>trimmed for brevity...</p>\n"]}

Quel messaggio trasporta HTML come payload argomento per il metodo updateStep sul lato client. Che il testo "rifilato per brevità" è la fonte di preoccupazione. Il contenuto potrebbe crescere drammaticamente a seconda di come un istruttore ha creato un passo. Per ora, questo è il solo testo. Potete immaginare come vuoi crescere la dimensione del messaggio se hai provato a inviare le pagine di contenuto o di un'immagine giù il tubo. Il testo o l'immagine sarebbe serializzata nel formato JSON e consegnato ad ogni cliente, utilizzando le risorse della pipeline segnalazione. Invece, voglio solo per inviare il segnale, particolarmente il nuovo ID contenuto dovrebbe caricare il browser. Quel messaggio notevolmente più piccolo sarebbe guardare più come questo:

{"H":"ModuleStepHub","M":"notifyStepAvailable","A":[7]}

Ora che so quello che sto cercando di realizzare con mio messaggistica, posso costruire fuori questa funzionalità nella mia applicazione.

**Creare l'Hub:**Aggiungere una cartella di Hub al mio progetto, quindi aggiungere una classe di Hub SignalR (v2) dalla finestra di dialogo Aggiungi nuovo elemento. Un hub è il pezzo sul lato server di SignalR creato per pubblicare messaggi e gestire le chiamate del client. Questa rotta, Visual Studio tira nel mio dipendenze e scaffolds una classe con un metodo di esempio nel mio hub. Rimuovere il metodo sample e crearne uno nuovo che mi permette di inviare un messaggio con il codice seguente:

public void MakeStepAvailable(int stepId)
{
  Clients.Others.
notifyStepAvailable(stepId);
}

La premessa qui è che l'istruttore del corso richiamerà qualche tipo di azione che invia il passo lungo agli studenti. Utilizzando le altre proprietà dinamica dei client dell'oggetto, dico SignalR per inviare l'ID passo a tutti gli altri client connessi. SignalR fornisce un certo numero di tali opzioni di filtro, così posso aggiornare un utente specifico, un gruppo di utenti o qualche altra fetta di clienti collegati. L'hub permette inoltre di istruttori di iniziare un nuovo modulo. Gli studenti possono ottenere l'elenco dei passaggi messi a disposizione dall'istruttore.

Mappa di mozzi SignalR per esporre la funzionalità crea nel mio hub, ho bisogno di poke SignalR come sta iniziando la mia applicazione. Una chiamata a MapSignalR imposta un endpoint predefinito che serve un proxy JavaScript. Quando inclusa nel client, questo richiama metodi lato server dal client e viceversa. La cartella radice del mio progetto include una classe di avvio OWIN dove fare la chiamata a fare il cablaggio nel metodo di configurazione. Questo appare che dopo le mie modifiche:

public void Configuration(IAppBuilder app)
{
  ConfigureAuth(app);
  app.MapSignalR();
}

È importante chiamare ConfigureAuth qui prima. La pipeline OWIN spinge i messaggi attraverso middleware nell'ordine che è stato registrato il middleware. Nel nostro caso, vogliamo l'autenticazione e l'autorizzazione a verificarsi prima chiamate raggiungono i nostri Hub.

Abilitare la condivisione per permettere l'istruttore condividere contenuti, aggiungo un altro controller per l'applicazione denominata InstructController. Questo ha solo un'azione di indice. Io ho decorato la classe con l'attributo Authorize, così che solo gli amministratori possono controllare l'Aula. L'azione index accetta un modulo ID come parametro, l'itinerario per il quale si configura nella mia classe di App_Startup\RouteConfig.cs. Il metodo cerca il modulo dal database e restituisce il record per la visualizzazione con l'insieme di passaggi incluso nella query.

Nella visualizzazione corrispondente (che si trova presso Views\Instruct\Index.cshtml), semplicemente generare un pulsante Condividi per ogni passaggio. Io uso un attributo id-dati per memorizzare l'ID del passo. Includono la biblioteca SignalR e il proxy mozzo esposto nel passaggio precedente, quindi scrivere una piccola quantità di JavaScript per avviare il proxy e gestire eventi click da istruttore, come mostrato Figura 5.

Figura 5 JavaScript per avviare il Proxy e gestire eventi fare clic su

<script src="~/Scripts/jquery.signalR-2.0.3.js"></script>
<script src="~/SignalR/Hubs"></script>
<script>
  $(function() {
    var hub = $.connection.moduleStepHub;
    $.connection.hub.start().done(function() {
      $(".share-step").click(function() {
        var stepId = $(this).attr("data-id");
          hub.server.makeStepAvailable(stepId);
      });
    });
  });
</script>

Infine, modifico la mia pagina indice amministrativo per includere l'elenco dei corsi e moduli da cui potete scegliere l'istruttore. L'interfaccia finale, come visualizzato in Figura 6, permette di saltare a destra in un modulo e iniziare ad insegnare l'istruttore.

The Administrative Interface for FrontClass
Figura 6 l'interfaccia amministrativa per FrontClass

Utilizzando il modulo vista dal Figura 4, l'istruttore può quindi inviare contenuti nella classe.

Classe partecipazione

Come studente, la storia è molto più semplice. Basta presentarsi! Ogni studente dovrà iscriversi per accedere al sito e ricevere istruzioni per il modulo attivo corso che hanno bisogno di inserire il codice di protezione. Il processo di registrazione è curato da controller di Account predefinito nel mio progetto. Avrò bisogno di creare del contenuto della pagina che ospita la lezione e scrivere il codice necessario per gli studenti di partecipare in classe. Per gli studenti di aderire l'Aula quando una classe è attiva, che deve avere prima iscritti per il corso.

Costruire il Controller Aula con il tasto destro sulla cartella controller nella radice del progetto consente di aggiungere un nuovo controller e denominarlo ClassroomController. I due metodi principali che ad aggiungere a questa classe sono indice, dove sarà servito il contenuto principale, e GetModuleStep, che restituisce il passo richiesto dopo l'incontro con un certo numero di condizioni preliminari. Una terza azione gestisce casi dove non non c'è nessun modulo attivo per la classe. Per accedere ai materiali dei moduli, uno studente deve essere loggato al sito e si iscrive nel corso del modulo attivo.

Consentire l'iscrizione corso ClassroomController The è deco­voto con un EnrollmentVerficationFilter che ho creato per garantire che gli studenti possono accedere solo i corsi per i quali hanno il codice voce impostato dall'istruttore. Se l'utente non ha ancora iscritto o un istruttore non ha iniziato un modulo, poi gli studenti vengono reindirizzati all'azione indice sulla EnrollmentController, come si può vedere Figura 7. Gli studenti possono iscriversi ad un corso con il codice voce appropriata. All'iscrizione di successo, aggiungo un reclamo all'account utente utilizzando i relativi componenti di identità ASP.NET .

The Course Lobby and Enrollment Page
Figura 7 il corso Lobby e la pagina di registrazione

Aggiungo una richiesta tramite la classe UserManager, a cui accedere ottenendo un'istanza di mio ApplicationDbContext e che utilizza per costruire un UserStore, che poi viene passato nella mia classe di destinazione:

var context = new ApplicationDbContext();
var userStore = new UserStore<ApplicationUser>(context);
var userManager = new UserManager<ApplicationUser>(userStore);

Una volta ottenuto il componente necessario in luogo, ottengo l'ID dell'utente attraverso l'oggetto principal che rappresenta la sua identità e costruire un oggetto di reclamo. Poi aggiungo che per l'account utente:

var userId = User.Identity.GetUserId();
var courseClaim = new Claim(MvcApplication.CourseRegistrationClaimUrn,
  enroll.CourseId.ToString(CultureInfo.InvariantCulture));
userManager.AddClaim(userId, courseClaim);

Con il reclamo al posto dell'account dell'utente, uno studente può ora accedere l'Aula.

Esaminare l'Aula come si può vedere Figura 8, l'Aula è divisa in due parti. La parte superiore della pagina offre una panoramica del modulo corrente e fornisce controlli per saltare a qualsiasi passo disponibile. La sezione inferiore è chiamata la lavagna e visualizza i contenuti condivisi dall'istruttore.

The Virtual Chalkboard
Figura 8 la lavagna virtuale

Questa pagina davvero ha solo un paio di elementi DIV come contenitori di contenuti. Il resto è collegato tramite JavaScript e attraverso contenuti recuperati basato sui messaggi provenienti dalla ClassroomHub o la selezione dello studente di un passaggio precedente. Come istruttore seleziona nuovi passi, il ClassroomHub è notificato e invia segnali a tutti coloro che sono in classe. Questo a sua volta recupera dati dalla ClassroomController, consentendo la memorizzazione nella cache.

Distribuire il progetto

L'istruttore può creare e gestire corsi, moduli e passaggi. Uno studente può registrare per il sito e lo stesso iscriversi a corsi. Corsi sono protetti tramite registrazione reclami e lavagna virtuale di aula è aggiornata con contenuti come diretto dall'istruttore. Tempo a spedire!

Dal menu, selezionare l'opzione per pubblicare il mio progetto. Viene visualizzata la finestra di dialogo pubblicazione Web e scegliere siti Web Azure come destinazione pubblica. Visual Studio mi spinge le mie credenziali, se non ho già iscritto. Quindi posso scegliere il sito esistente che ho creato all'inizio di questo progetto. Editrice il mio profilo è quindi scaricato, completare con le stringhe di connessione di database pre-configurati e tutte le credenziali necessarie per inviare il mio sito di Azure.

All'inizio di questo progetto, predisposto come prima il mio sito nel portale Azure. Perché questo progetto utilizza la stringa di connessione DefaultConnection, già presente nel mio profilo editoria, non ho bisogno di apportare modifiche quando vado alla produzione. La stringa di connessione della produzione punti automaticamente la mia applicazione al Database SQL Azure precedentemente configurato.

Sfruttare siti Web azzurri

Pubblicazione di un sito a un endpoint pre-configurati nei siti Web di Azure, è stata una gradita sorpresa. Era in realtà facile. Dopo anni di sopravvivenza con molto più complicate procedure di distribuzione, questo è stato sicuramente una delizia. Questo da solo non è la fine del gioco per siti Web di Azure. Ci sono molti più strumenti disponibili:

  • Aggiungere un dominio personalizzato: Se è possibile registrare un dominio e impostare un paio di record DNS, richiede solo minuti aggiungere un unico dominio di tua scelta per il vostro sito. Legga più circa questo a bit.ly/1sV8R1y.
  • Garantire l'applicazione: Sono permettersi certificati basati su SNI­in grado, ed è possibile aggiungerli attraverso il cruscotto del vostro sito Web Azure. Legga più circa questo a bit.ly/1mYXndJ.
  • Scalare il sito: Se trovate che il progetto sta crescendo, avete l'opzione di scalare (hardware più potente) o fuori (a più istanze). Don' t dimenticare di configurare anche Azure Service Bus per gestire il traffico SignalR. Leggi tutto su SignalR a bit.ly/1o6B7AC.
  • Aggiungi distribuzione continua: Anche i progetti più piccoli, distribuzione diretta di rinunciare e utilizzare un server di controllo di origine basato su Git. Azure crea quindi, stadi e distribuisce automaticamente il mio sito su check-in. Legga più circa questo a bit.ly/1o6BACT.
  • Aggiungi monitoraggio e avvisi: È sempre meglio sapere quando qualcosa non sta andando abbastanza bene nell'applicazione. Puoi guardare per alcuni tipi di problemi e ottenere le notifiche come essi accadono, tutte configurate dal dashboard del vostro sito.

Conclusioni

In questo articolo, utilizzato ASP.NET 2.0 di identità, che ora è parte del modello MVC ASP.NET predefinito in Visual Studio 2013. Per ulteriori informazioni sui miglioramenti e modifiche, si prega di consultare il post sul .NET Web sviluppo e strumenti di Blog a bit.ly/PXgQ2d. Ho anche usato SignalR per consentire la comunicazione in tempo reale tra il client e il server. Questo automaticamente genera proxy JavaScript e richiama il codice sul server dal client e viceversa. Per ulteriori informazioni sulla creazione di modello dati utilizzando EF con il primo codice in un'applicazione di MVC 5 ASP.NET , visitare il tutorial a bit.ly/1pivbmE.

Esperienze ricche sono molto più facili da consegnare quando non è necessario prendersi cura dell'infrastruttura sottostante o la complessità della distribuzione. L'applicazione FrontClass sfrutta l'autenticazione, autorizzazione, messaggistica in tempo reale e un archivio di dati persistenti. Come sviluppatore, ricevo molti di questi blocchi di costruzione grazie agli sforzi degli altri. Non devo preoccupare le altre parti in movimento come mi muovo il mio progetto in produzione.

James Chambers è un Microsoft MVP in ASP.NET/IIS e relatore a conferenze e gruppi di utenti in tutto il Canada. Egli è l'autore di "Windows Azure siti Web" (Wrox, 2013), disponibile via eBook (bit.ly/wawsbook) e presentato il Microsoft Virtual Academy (bit.ly/wawsmva). Ha Blog a jameschambers.com ed è possibile contattarlo su Twitter a twitter.com/CanadianJames.

Grazie all'esperto tecnica seguente per la revisione di questo articolo: Chad McCallum (consulente indipendente)