Gennaio 2018

Volume 33 Numero 1

Il presente articolo è stato tradotto automaticamente.

Punti dati - Creazione di Funzioni di Azure per l'interazione con Cosmos DB

Da Julie Lerman

Julie LermanIn my ultima colonna, è esaminato in dettaglio la creazione di una semplice app di Windows della piattaforma UWP (Universal), un gioco chiamato CookieBinge, che è stato fondamentalmente motivare affinché sia possibile esplorare usando Entity Framework Core 2.0 (Entity Framework Core) in un limite di dispositivi App di Windows 10. L'aggiunta di provider per un database portabile, ad esempio SQLite completare l'immagine per rendere questa possibilità.

L'app, nello stato corrente, archivia punteggi dei giochi localmente nel dispositivo in cui viene riprodotto il gioco tramite EF Core 2.0 per mantenere i dati in un database SQLite. Dell'ultimo articolo, promessa che l'iterazione successiva del gioco consente agli utenti di condividere dati con gli altri giocatori su Internet. Per raggiungere tale obiettivo, useranno due funzionalità di Azure: Azure Cosmos DB e funzioni di Azure.

Un Bit su Azure Cosmos DB

DB Cosmos Azure rappresenta la nuova generazione di ciò che è iniziata vita come database di documenti di Azure, ovvero una tecnologia che ho creato circa più volte in questa colonna. "Una panoramica di Microsoft Azure DocumentDB" (msdn.com/magazine/mt147238) nel mese di giugno 2015 è stata seguita da due ulteriori articoli in cui utilizzato come back-end di un'app Aurelia Web tramite un server Node.js API.

Si è evoluto DocumentDB per diventare un database con alcune funzionalità straordinarie distribuito in modo globale. Oltre la facilità con cui possono essere distribuito a livello globale, i modelli di coerenza sono stati riallineati in modo che sia presente per scegliere tra più semplicemente sicuro e finale. Tra questi due estremi, gli utenti possono ora anche scegliere-con obsolescenza associata, sessione o prefisso coerenza. Sono disponibili molte funzionalità più importanti per supportare l'archivio dati e l'ora è stato aggiunto il database di documenti da una serie di altri modelli di dati, ovvero documenti, accessibili tramite APIs MongoDB, i database di grafico, tabella (coppia chiave/valore) e archiviazione delle colonne di dati. Tutti questi modelli sono sotto l'ombrello DB Cosmos. Infatti, se si dispone di Azure DocumentDB, è stato automaticamente impostato per un database Cosmos di Azure, consentendo il database esistente di documento per trarre vantaggio da tutte le nuove funzionalità che COSMOS DB offre. È possibile leggere molto più su DB Cosmos iniziando dalla cosmosdb.com.

E un Bit sulle funzioni di Azure

Vado utilizzare DB Cosmos per archiviare i punteggi CookieBinge. Tuttavia, anziché scrivere tutto il codice per me utilizzando le API DB documento, sarà sfruttare un'altra relativamente nuova funzionalità di Azure: Funzioni di Azure. Funzioni di Azure è "senza server di elaborazione" offerta. Un skeptic su questa frase sono sempre stato perché il calcolo è ancora in un server... ma non il server. Ma abbia avuto infine la possibilità di usare le funzioni di Azure, è ora disponibile un ottimo riguardo il concetto di. Azure funzioni, è possibile che concentrarsi sulla logica dell'effettiva che si desidera eseguire l'app, mentre si occupa dei problemi da affrontare a montaggio incrociato, ad esempio distribuzione, che supportano le API e le connessioni da altre funzionalità come l'archiviazione dei dati o l'invio di messaggi di posta elettronica. Completamente comprensibile questo fino a quando non è stato ottenuto questo, pertanto spero che seguendo il percorso come preparare questa funzionalità per l'app CookieBinge, avrai a disposizione il aha momento.

Preparazione per la compilazione la prima funzione di Azure

Esistono tre modi per creare funzioni di Azure. Uno è con strumenti di Visual Studio 2017. Un vantaggio è direttamente nel portale di Azure. È anche possibile utilizzare il codice di Visual Studio in combinazione con l'interfaccia della riga di comando di Azure (CLI). Ho deciso di avviare formazione personale tramite il portale esaminato me tutte la procedura. Un altro vantaggio è che senza l'aiuto degli strumenti di Visual Studio 2017, è dato dal fatto costretti a considerare un po' più difficile su tutti gli elementi mobili. Sento che molto migliore comprensione in questo modo, viene visualizzato. Naturalmente, esistono numerose risorse avventure per eseguire questa operazione in Visual Studio 2017, nonché, ma l'altra operazione in genere sull'uso del portale è basato sul Web e, pertanto, un'opzione multipiattaforma. Tenere presente, mentre in Azure, è possibile distribuire il codice della funzione e gli elementi di controllo del codice sorgente, gli elementi elaborati direttamente nel portale di dovranno essere scaricato nel computer in uso (un'attività semplice) e da lì, inserito nel repository.

Se si desidera seguire la procedura e si dispone già di una sottoscrizione di Azure, sono soddisfatto informare l'utente che è possibile ottenere una sottoscrizione gratuita, e non è sufficiente per una valutazione breve. Alcuni prodotti Azure sarà disponibile per un anno e sono presenti alcuni decina che sarà sempre disponibile. Passare a azure.com/free per la configurazione. Si sta utilizzando l'account che viene visualizzato come parte dell'abbonamento Visual Studio, che ha un limite mensile consentito carta di credito per la sperimentazione con Azure.

Prima di creare le funzioni, è necessario definire obiettivi personali. Si desidera l'applicazione in grado di:

  • Archiviare i punteggi di utente nel Web, salvare in modo permanente non solo alcune informazioni utente e la data e il punteggio, ma anche il tipo di dispositivo il gioco è stato riprodotto.
  • Consentire agli utenti di recuperare i punteggi più elevati tra tutti i dispositivi in cui sono in corso la riproduzione.
  • Consente all'utente di recuperare i punteggi più elevati per tutti gli utenti.

Non verrà costringe a questa lezione con importanti quali la creazione e l'autenticazione degli account, anche se naturalmente è necessario che per le situazioni reali. L'obiettivo è descrivere le funzioni di Azure e, infine, l'interazione da app UWP.

Creazione della funzione di Azure nel portale di Azure

Funzioni di Azure è un servizio che verrà raggruppato in un'app di funzione che consente di definire e condividere le impostazioni in un set di funzioni. In tal caso, inizierà creando una nuova app di funzione. Nel portale di Azure, fare clic su Nuovo e filtrare facilmente in "funzione app" per trovare tale opzione. Nell'elenco dei risultati, quindi Create, che richiede di compilare alcuni metadati, ad esempio un nome per l'app, fare clic su App di funzione. È denominato mine cookiebinge.azurewebsites.net. Poiché questa è una dimostrazione di semplice, sarà accettare il resto delle impostazioni predefinite nella pagina di creazione. Per semplificare l'accesso futuro all'app di funzione nuova, controllare il Pin per l'opzione di Dashboard e quindi sul pulsante Crea. Impiegato solo circa 30 secondi per la distribuzione dell'applicazione nuova funzione deve essere completato.

Ora è possibile aggiungere alcune funzioni nell'app di funzione. Verranno compilati come funzioni utilizzate per supportare l'elenco degli obiettivi indicato in precedenza. Il servizio di funzioni di Azure include un set di predefiniti (e piuttosto rich) di eventi che può rispondere al, tra cui una richiesta HTTP, una modifica in un database DB Cosmos, o un evento in un blob o una coda. Poiché è necessario chiamare queste funzioni da app UWP, si desidero funzioni che rispondono alle richieste transita tramite HTTP. Il portale fornisce una gamma di modelli in una vasta gamma di linguaggi: Bash, Batch, c#, F #, JavaScript, PHP, PowerShell, Python e TypeScript. Si utilizzerà in c#.

Per creare la prima funzione all'interno dell'applicazione di funzione, fare clic sul segno più accanto all'intestazione di funzioni. Si noterà che i pulsanti per creare funzioni predefinite, ma se si scorre verso il basso di sotto di questi pulsanti, è disponibile un collegamento per creare una funzione personalizzata. Scegliere l'opzione e verrà visualizzato una griglia scorrevole riempita con le opzioni dei modelli, come illustrato nella figura 1. Trigger HTTP: c# dovrebbe essere nella parte superiore dell'elenco e che l'opzione da selezionare.

Un Bit dell'elenco di modelli per la creazione di nuove funzioni di Azure personalizzate
Figura 1 Bit dell'elenco di modelli per la creazione di nuove funzioni di Azure personalizzate

Il nome della funzione e quindi fare clic sul pulsante Crea. È denominato miei StoreScores.

Il portale di creare una funzione con un codice predefinito per visualizzare la struttura. La funzione è inclusa in un file denominato run.csx (vedere figura 2). È possibile includere logica aggiuntiva in file di supporto, nonché, ma che è più avanzata quella necessaria per questo aspetto prima.

Logica della funzione predefinita per un nuovo HTTPTrigger
Figura 2 logica della funzione predefinita per un nuovo HTTPTrigger

L'unico metodo nell'esempio viene chiamato l'esecuzione, ovvero come Azure verrà chiamato in risposta a una richiesta HTTP per questa funzione. Include un parametro per acquisire la richiesta e l'altra per trasmettere informazioni a un log.

Nell'esempio, si noterà che la funzione esegue la ricerca di dati in ingresso che rappresenta un nome e la funzione è sufficientemente flessibile per eseguire la ricerca nei parametri di query e nel corpo della richiesta. Se non viene trovato il nome, la funzione restituirà un HttpResponseMessage con un messaggio di errore descrittivo, in caso contrario restituisce "Hello [nome]" nella risposta.

Personalizzazione della funzione per interagire con Cosmos DB

L'obiettivo della funzione consiste nell'archiviare i dati in arrivo in un database DB Cosmos. Ecco in cui inizia il trucco. Non è necessario per creare connessioni e i comandi e altro codice per eseguire questa operazione. Funzioni di Azure è in grado di integrare facilmente con un numero di altri prodotti di Azure, e Cosmos DB è uno di essi.

Nell'elenco di funzioni, si noterà la nuova funzione e tre gli elementi sottostanti. Uno di questi elementi è integra. Selezionare e verrà visualizzato il modulo illustrato parzialmente nella figura 3. Si noti che dichiara il trigger è una richiesta HTTP e che l'output restituisce un elemento tramite HTTP. Poiché desidera restituire un messaggio con esito positivo o negativo, si desidera mantenere tale output HTTP. Ma si desidera aggiungere un output che include una raccolta di DB Cosmos come destinazione.

Definire i punti di integrazione di funzioni
Figura 3 che definisce i punti di integrazione di funzioni

A tale scopo, fare clic su Nuovo Output, che verrà visualizzato un elenco di icone. Scorrere fino a quello denominato Azure Cosmos DB, selezionarlo e quindi ulteriormente verso il basso nella pagina verrà visualizzato un pulsante Seleziona. Si conosce quali operazioni eseguire. (Fare clic sul pulsante!)

La schermata per configurare questa integrazione ottiene pre-popolata con i valori predefiniti. Il nome del parametro documento rappresenta il parametro da usare in run.csx. Sarà lasciare che il nome predefinito, outputDocument. Successivamente sono i nomi del database DB Cosmos e raccolta all'interno di tale database, nonché la connessione all'account Cosmos DB in cui si trova il database. Si noterà anche una casella di controllo per creare automaticamente il database. Si dispone già di alcuni account Cosmos DB creato, quindi verrà utilizzare uno di questi, ma consentire la funzione crea un nuovo database denominato CookieBinge con un insieme denominato Binges in tale account. Figura 4 viene illustrato come è stato compilato questo modulo prima di salvare la definizione di output. Poiché è stata contrassegnata la casella di controllo per creare il database e la raccolta, quelli verrà creati per l'utente corrente, ma non quando si salva l'output. Quando la funzione innanzitutto tenta di archiviare dati nel database e si vede che non esiste, la funzione verrà creato il database in tempo reale.

La definizione di un database Cosmos come Output per la funzione
Figura 4, la definizione di un database Cosmos come Output per la funzione

Personalizzazione Run.csx

A questo punto è necessario ridefinire il codice della funzione. La nuova versione della funzione prevede un oggetto JSON che passato in linea con questa classe BingeRequest, che aggiunta nel file run.csx sotto il metodo di esecuzione:

public class BingeRequest{
  public string userId {get;set;}
  public string userName {get;set;}
  public string deviceName {get;set;}
  public DateTime dateTime {get;set;}
  public int score{get;set;}
  public bool worthit {get;set;}
}

Ma non è la stessa struttura dei dati che si desidera archiviare in quanto si desidera acquisire una proprietà di altre, la data e ora i dati registrati nel database. L'operazione verrà eseguita utilizzando una seconda classe BingeDocument, che eredita da BingeRequest, in tal modo che eredita tutte le relative proprietà, nonché l'aggiunta di una proprietà di altre denominata avvenuta. Il costruttore accetta un BingeRequest popolati e dopo l'impostazione del valore di registrazione, che trasferisce i valori BingeRequest di proprietà:

public class BingeDocument:BingeRequest
  {     
    public BingeDocument(BingeRequest binge){
    logged=System.DateTime.Now;
    userId=binge.userId;
    userName=binge.userName;
    deviceName=binge.deviceName;
    dateTime=binge.dateTime;
    score=binge.score;
    }
    public DateTime logged{get;set;}
  }

Con questi tipi sul posto, il metodo Run può ora usufruire di essi. Figura 5 Mostra l'elenco modificato per run.csx, inclusi i segnaposto per le classi BingeRequest e BingeDocument descritte in precedenza.

Consente di analizzare il nuovo metodo di esecuzione. La firma accetta una richiesta e un TraceWriter come ha la firma originale, ma ora include anche un parametro di output asincrono denominato outputDocument. Il risultato del parametro di output è ciò che verrà inviato all'output DB Cosmos sono state definite. Si noti che il relativo nome viene allineato con il nome del parametro di output nella configurazione di output nel figura 4. Consente di TraceWriter messaggi di output alla finestra log che si trova sotto la finestra del codice. Più questi alla fine, ma è ad esempio i giorni precedenti, senza l'IDE che consentono di eseguire il debug. Non ottiene me non è corretto, tuttavia. La finestra del codice è sorprendente analisi la lingua in uso e quando si salva, eventuali errori del compilatore, che sono molto dettagliate, ottenere anche un output alla finestra di debug. Inoltre, vengono eseguite operazioni come l'inserimento di una parentesi graffa di chiusura quando si digita in una parentesi graffa di apertura. Esistono un numero notevole di funzionalità dell'editor, in realtà. Ad esempio, fare doppio clic nella finestra dell'editor per visualizzare l'elenco di funzionalità dell'editor di cui è possibile sfruttare lungo.

Figura 5 il nuovo File run.csx acquisizione di Binge e archiviare i dati nell'Output, Cosmos DB

using System.Net;
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req,
  TraceWriter log,    IAsyncCollector<object> outputDocument)
{
  BingeRequest bingeData =  await req.Content.ReadAsAsync<BingeRequest>();
  log.Verbose("Incoming userId:" + bingeData.userId);
  var doc=new BingeDocument(bingeData,log);
  log.Verbose("Outgoing userId:" + doc.userId);
  await outputDocument.AddAsync(doc);
  if (doc.userId !=" " ){
    return req.CreateResponse(HttpStatusCode.OK,$"{doc.userId} was created" );
  }
  else {
    return req.CreateResponse(HttpStatusCode.BadRequest,
      $"The request was incorrectly formatted." );
  }
}
public class BingeRequest{ . . . }
public class BingeDocument { . . . }

La prima riga di codice in esecuzione in modo asincrono la richiesta di legge e converte il risultato in un oggetto BingeRequest.

Successivamente, creare l'istanza di un nuovo BingeDocument, passando l'oggetto che è stato appena creato dalla richiesta, che si traduce in un oggetto BingeDocument completamente popolato, insieme alla proprietà connesso popolata.

Usare quindi il TraceWriter per visualizzare alcuni dati della richiesta nei log in modo, quando il debug, è possibile stabilire se BingeDocument effettivamente ha ottenuto i dati dall'oggetto request.

Infine, si aggiunge in modo asincrono il BingeDocument appena creata nel outputDocument asincrona.

Il risultato di tale oggetto outputDocument è ciò che viene inviato da DB Cosmos dalla funzione. Venga archiviato in formato JSON di DocumentDB, la funzione converte nuovamente in background per l'utente. Poiché raggruppati tutti gli elementi con le impostazioni di integrazione, non devo scrivere codice per verificare che si verifica.

Quando tutti alla fine, restituito un messaggio tramite HttpResponse, inoltro esito positivo o negativo della funzione.

Compilazione e la funzione di test

Le funzioni vengono compilate quando vengono salvati. Vado eliminare in modo casuale qualcosa di importante nel codice che consente di vedere in azione, il compilatore con i risultati visualizzati nella finestra log sotto la finestra del codice. Figura 6 illustra il compilatore di output, evidenziare il chaos creato mediante l'eliminazione di una parentesi graffa di apertura dalla riga 13. Anche senza un debugger, ho trovato che visualizzare questi errori è stato utile di lavoro tramite codice che ho dovuto scrivere senza l'aiuto di IntelliSense o altri strumenti di codifica in my IDE. Allo stesso tempo, devo quanto dipende questi strumenti.

La finestra di Log contenente informazioni del compilatore, inclusi gli errori
Figura 6 la finestra di Log contenente informazioni del compilatore, inclusi gli errori

Quando il codice è fisso e il compilatore non è soddisfatto, il log verrà visualizzato il messaggio di "Reloading" seguito da "Compilazione completata".

Ora è possibile testare la funzione e per eseguire tale diritto nella stessa finestra in cui i codice sia scritto la funzione. A destra dell'editor di codice sono inclusi due riquadri a schede. Una consente di visualizzare l'elenco di file relativo alla funzione. Per impostazione predefinita, sono presenti solo due, il file run.csx che attualmente osservando e un file function.json che contiene tutte le impostazioni definite nell'interfaccia utente.  In altra scheda è per l'esecuzione di test. Questo test predefinito dell'interfaccia utente è ad esempio un Postman minima o un'applicazione di Fiddler per la creazione di richieste HTTP con molta meno lavoro richiesto perché è già conoscere la funzione da sottoporre a test. È sufficiente è inserire un oggetto JSON per rappresentare la richiesta in ingresso. Le impostazioni predefinite dell'interfaccia utente di test per l'invio di un HTTP Post, pertanto non anche necessario modificare questa configurazione per questo test. Immettere il codice JSON seguente nella casella di testo corpo della richiesta. Lo schema è importante, ma è possibile utilizzare i valori desiderati:

{
  "userId": "54321",
  "userName": "Julie",
  "deviceName" : "XBox",
  "dateTime": "2017-10-25 15:26:00",
  "score" : "5",
  "worthit" : "true",
  "logged": ""
}

Successivamente, fare clic sul pulsante Esegui nel riquadro dei Test. Il test verrà chiamata la funzione, passando nel corpo della richiesta e quindi Visualizza i risultati HTTP nella finestra di Output. In figura 7, è possibile visualizzare l'output "54321 è stato creato," e l'output del log dalla funzione nella finestra del log.

Il riquadro dei Test dopo l'esecuzione di un Test nella funzione
Figura 7, il riquadro dei Test dopo l'esecuzione di un Test nella funzione

Visualizzazione dei nuovi dati nel Database Cosmos DB

Cosa è possibile visualizzare è che in seguito a questo primo test ha esito positivo, è stato creato il database CookieBinge Cosmos DB e in essa contenuto, dell'insieme di Binge in cui è stato archiviato in questo documento. Diamo un'occhiata che prima di occuparsi di questo articolo della colonna in più parti.

È possibile farlo aprendo l'account di database Cosmos nel portale in cui è stato creato il database. Il mio viene chiamato datapointscosmosdb, in modo da attivare per tutte le risorse e il tipo datapoints nel filtro per individuarlo. Quando si apre l'account, è possibile visualizzare tutte le raccolte e il database non esiste, anche se l'unica ho è raccolta personale Binges nel database CookieBinge, come illustrato nella figura 8. È ciò che è stata creata dalla funzione.

Raccolta Binges elencati in datapointscosmosdb Account
Figura 8 il Binges insieme al datapointscosmosdb Account

Fare clic su Binges per aprire il visualizzatore per i dati per la raccolta. È stato eseguito due volte, il test, in modo da visualizzare figura 9 che due documenti sono stati archiviati nella raccolta. I primi sette proprietà del documento sono le proprietà che sono state definite. Gli altri sono metadati utilizzati per attività quali l'indicizzazione, la ricerca, il partizionamento e più Cosmos DB e le relative API.

Esaminando i documenti archiviati in Cosmos DB nel portale
Figura 9 esaminando i documenti archiviati in Cosmos DB nel portale

Sviluppi futuri

Se si osserva figura 7, si noterà che è presente un collegamento Ottieni URL funzione sopra la finestra del codice. Tale URL è ciò che si utilizzerà nell'app CookieBinge per inviare dati al cloud.

Ora che è stato illustrato come creare la funzione e agganciare con Cosmos DB, la colonna successiva mostra come creare due altre funzioni per recuperare diverse visualizzazioni dei dati. L'ultima parte verrà illustrato come chiamare le funzioni da app CookieBinge e visualizzare i risultati.


Julie Lermanè un direttore regionale Microsoft, Microsoft MVP, istruttore team software e consulente vive massimi di Vermont. È possibile trovare la presentazione di accesso ai dati e altri argomenti in gruppi di utenti e conferenze tutto il mondo. Un blog all'utente e la indirizzo thedatafarm.com ed è l'autore di "Programmazione di Entity Framework", nonché un Code First e un'edizione DbContext, tutto da o ' Reilly Media. Seguire proprio su Twitter: @julielerman e vedere proprio corsi Pluralsight PS/juliel.me-video.

Grazie per il seguente esperto tecnico di Microsoft per la revisione dell'articolo: Jeff Hollan


Viene illustrato in questo articolo nel forum di MSDN Magazine