Come creare un'app Web con la cache RedisHow to create a Web App with Redis Cache

Questa esercitazione illustra come creare e distribuire un'applicazione Web ASP.NET in un'app Web nel servizio app di Azure usando Visual Studio 2017.This tutorial shows how to create and deploy an ASP.NET web application to a web app in Azure App Service using Visual Studio 2017. L'applicazione di esempio mostra un elenco di statistiche del team da un database e illustra i diversi modi in cui è possibile usare la cache Redis di Azure per archiviare e recuperare i dati dalla cache.The sample application displays a list of team statistics from a database and shows different ways to use Azure Redis Cache to store and retrieve data from the cache. Al termine dell'esercitazione, si avrà un'app Web in esecuzione che legge e scrive in un database, ottimizzata per la cache Redis di Azure e ospitata in Azure.When you complete the tutorial you'll have a running web app that reads and writes to a database, optimized with Azure Redis Cache, and hosted in Azure.

Si apprenderà come:You'll learn:

  • Come creare un'applicazione Web ASP.NET MVC 5 in Visual Studio.How to create an ASP.NET MVC 5 web application in Visual Studio.
  • Come accedere ai dati da un database usando Entity Framework.How to access data from a database using Entity Framework.
  • Come ottimizzare la velocità effettiva dei dati e ridurre il carico del database archiviando e recuperando i dati con la cache Redis di Azure.How to improve data throughput and reduce database load by storing and retrieving data using Azure Redis Cache.
  • Come usare un set ordinato Redis per recuperare i primi 5 team.How to use a Redis sorted set to retrieve the top 5 teams.
  • Come effettuare il provisioning delle risorse di Azure per l'applicazione usando un modello di Azure Resource Manager.How to provision the Azure resources for the application using a Resource Manager template.
  • Come pubblicare l'applicazione in Azure usando Visual Studio.How to publish the application to Azure using Visual Studio.

PrerequisitiPrerequisites

Per completare l'esercitazione, sono necessari i prerequisiti seguenti.To complete the tutorial, you must have the following prerequisites.

Account AzureAzure account

Per completare l'esercitazione, è necessario un account Azure.You need an Azure account to complete the tutorial. È possibile:You can:

Visual Studio 2017 con Azure SDK per .NETVisual Studio 2017 with the Azure SDK for .NET

L'esercitazione è stata scritta per Visual Studio 2017 con Azure SDK per .NET.The tutorial is written for Visual Studio 2017 with the Azure SDK for .NET. Azure SDK 2.9.5 è incluso nel programma di installazione di Visual Studio.The Azure SDK 2.9.5 is included with the Visual Studio installer.

Se è installato Visual Studio 2015, è possibile seguire l'esercitazione con Azure SDK per .NET 2.8.2 o versione successiva.If you have Visual Studio 2015, you can follow the tutorial with the Azure SDK for .NET 2.8.2 or later. Scaricare qui la versione più recente di Azure SDK per Visual Studio 2015.Download the latest Azure SDK for Visual Studio 2015 here. Visual Studio viene installato automaticamente con l'SDK, se necessario.Visual Studio is automatically installed with the SDK if you don't already have it. Alcune schermate potrebbero essere diverse da quelle illustrate nell'esercitazione.Some screens may look different from the illustrations shown in this tutorial.

Se è disponibile Visual Studio 2013, è possibile scaricare la versione più recente di Azure SDK per Visual Studio 2013.If you have Visual Studio 2013, you can download the latest Azure SDK for Visual Studio 2013. Alcune schermate potrebbero essere diverse da quelle illustrate nell'esercitazione.Some screens may look different from the illustrations shown in this tutorial.

Creare il progetto di Visual StudioCreate the Visual Studio project

  1. Aprire Visual Studio e fare clic su File, Nuovo, Progetto.Open Visual Studio and click File, New, Project.
  2. Espandere il nodo Visual C# nell'elenco Modelli, selezionare Cloud e fare clic su Applicazione Web ASP.NET.Expand the Visual C# node in the Templates list, select Cloud, and click ASP.NET Web Application. Assicurarsi che sia selezionata l'opzione .NET Framework 4.5.2 o versione successiva.Ensure that .NET Framework 4.5.2 or higher is selected. Immettere ContosoTeamStats nella casella di testo Nome e fare clic su OK.Type ContosoTeamStats into the Name textbox and click OK.

    Crea progetto

  3. Selezionare MVC come tipo di progetto.Select MVC as the project type.

    Assicurarsi che per l'impostazione Autenticazione sia specificato Nessuna autenticazione.Ensure that No Authentication is specified for the Authentication settings. A seconda della versione di Visual Studio, il valore predefinito può essere diverso.Depending on your version of Visual Studio, the default may be set to something else. Per modificarlo, fare clic su Modifica autenticazione e selezionare Nessuna autenticazione.To change it, click Change Authentication and select No Authentication.

    Se si usa Visual Studio 2015, deselezionare la casella di controllo Ospita nel cloud.If you are following along with Visual Studio 2015, clear the Host in the cloud checkbox. Nei passaggi successivi dell'esercitazione si effettuerà il provisioning delle risorse di Azure e si pubblicherà l'applicazione in Azure.You'll provision the Azure resources and publish the application to Azure in subsequent steps in the tutorial. Per un esempio di provisioning di un'app Web del servizio app da Visual Studio con l'opzione Ospita nel cloud selezionata, vedere Introduzione alle app Web nel servizio app di Azure con ASP.NET e Visual Studio.For an example of provisioning an App Service web app from Visual Studio by leaving Host in the cloud checked, see Get started with Web Apps in Azure App Service, using ASP.NET and Visual Studio.

    Seleziona modello progetto

  4. Fare clic su OK per creare il progetto.Click OK to create the project.

Creare l'applicazione ASP.NET MVCCreate the ASP.NET MVC application

In questa sezione dell'esercitazione verrà creata l'applicazione di base che legge e visualizza le statistiche del team da un database.In this section of the tutorial, you'll create the basic application that reads and displays team statistics from a database.

Aggiungere il pacchetto NuGet di Entity FrameworkAdd the Entity Framework NuGet package

  1. Nel menu Strumenti fare clic su Gestione pacchetti NuGet e quindi su Console di Gestione pacchetti.Click NuGet Package Manager, Package Manager Console from the Tools menu.
  2. Nella finestra Console di Gestione pacchetti eseguire il comando seguente.Run the following command from the Package Manager Console window.

    Install-Package EntityFramework
    

Per altre informazioni sul pacchetto, vedere la pagina NuGet relativa a Entity Framework.For more information about this package, see the EntityFramework NuGet page.

Aggiungere il modelloAdd the model

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse su Modelli, quindi scegliere Aggiungi, Classe.Right-click Models in Solution Explorer, and choose Add, Class.

    Aggiungi modello

  2. Immettere Team come nome della classe e fare clic su Aggiungi.Enter Team for the class name and click Add.

    Aggiunta di una classe modello

  3. Sostituire le istruzioni using all'inizio del file Team.cs con le istruzioni using seguenti.Replace the using statements at the top of the Team.cs file with the following using statements.

    using System;
    using System.Collections.Generic;
    using System.Data.Entity;
    using System.Data.Entity.SqlServer;
    
  4. Sostituire la definizione della classe Team con il frammento di codice seguente che contiene una classe Team aggiornata, oltre ad altre classi helper di Entity Framework.Replace the definition of the Team class with the following code snippet that contains an updated Team class definition as well as some other Entity Framework helper classes. Per altre informazioni sull'approccio Code First per Entity Framework usato in questa esercitazione, vedere Code First per un nuovo database.For more information on the code first approach to Entity Framework that's used in this tutorial, see Code first to a new database.

    public class Team
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public int Wins { get; set; }
        public int Losses { get; set; }
        public int Ties { get; set; }
    
        static public void PlayGames(IEnumerable<Team> teams)
        {
            // Simple random generation of statistics.
            Random r = new Random();
    
            foreach (var t in teams)
            {
                t.Wins = r.Next(33);
                t.Losses = r.Next(33);
                t.Ties = r.Next(0, 5);
            }
        }
    }
    
    public class TeamContext : DbContext
    {
        public TeamContext()
            : base("TeamContext")
        {
        }
    
        public DbSet<Team> Teams { get; set; }
    }
    
    public class TeamInitializer : CreateDatabaseIfNotExists<TeamContext>
    {
        protected override void Seed(TeamContext context)
        {
            var teams = new List<Team>
            {
                new Team{Name="Adventure Works Cycles"},
                new Team{Name="Alpine Ski House"},
                new Team{Name="Blue Yonder Airlines"},
                new Team{Name="Coho Vineyard"},
                new Team{Name="Contoso, Ltd."},
                new Team{Name="Fabrikam, Inc."},
                new Team{Name="Lucerne Publishing"},
                new Team{Name="Northwind Traders"},
                new Team{Name="Consolidated Messenger"},
                new Team{Name="Fourth Coffee"},
                new Team{Name="Graphic Design Institute"},
                new Team{Name="Nod Publishers"}
            };
    
            Team.PlayGames(teams);
    
            teams.ForEach(t => context.Teams.Add(t));
            context.SaveChanges();
        }
    }
    
    public class TeamConfiguration : DbConfiguration
    {
        public TeamConfiguration()
        {
            SetExecutionStrategy("System.Data.SqlClient", () => new SqlAzureExecutionStrategy());
        }
    }
    
  5. In Esplora soluzioni fare doppio clic su web.config per aprirlo.In Solution Explorer, double-click web.config to open it.

    Web.config

  6. Aggiungere la sezione connectionStrings riportata di seguito.Add the following connectionStrings section. Il nome della stringa di connessione deve corrispondere al nome della classe contesto del database Entity Framework, ovvero TeamContext.The name of the connection string must match the name of the Entity Framework database context class which is TeamContext.

    <connectionStrings>
        <add name="TeamContext" connectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Teams.mdf;Integrated Security=True"     providerName="System.Data.SqlClient" />
    </connectionStrings>
    

    È possibile aggiungere la nuova sezione connectionStrings in modo che segua configSections, come illustrato nell'esempio seguente.You can add the new connectionStrings section so that it follows configSections, as shown in the following example.

    <configuration>
      <configSections>
        <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
        <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
      </configSections>
      <connectionStrings>
        <add name="TeamContext" connectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Teams.mdf;Integrated Security=True"     providerName="System.Data.SqlClient" />
      </connectionStrings>
      ...
    

    Nota

    La stringa di connessione potrebbe essere diversa a seconda della versione di Visual Studio e SQL Server Express Edition usate per completare l'esercitazione.Your connection string may be different depending on the version of Visual Studio and SQL Server Express edition used to complete the tutorial. Il modello di web.config deve essere configurato in modo da corrispondere all'installazione e può contenere voci Data Source come (LocalDB)\v11.0 da SQL Server Express 2012 o Data Source=(LocalDB)\MSSQLLocalDB da SQL Server Express 2014 e versioni successive.The web.config template should be configured to match your installation, and may contain Data Source entries like (LocalDB)\v11.0 (from SQL Server Express 2012) or Data Source=(LocalDB)\MSSQLLocalDB (from SQL Server Express 2014 and newer). Per altre informazioni sulle stringhe di connessione e le versioni di SQL Express, vedere SQL Server 2016 Express LocalDB.For more information about connection strings and SQL Express versions, see SQL Server 2016 Express LocalDB .

Aggiungere il controllerAdd the controller

  1. Premere F6 per compilare il progetto.Press F6 to build the project.
  2. In Esplora soluzioni fare clic con il pulsante destro del mouse sulla cartella Controller, quindi scegliere Aggiungi, Controller.In Solution Explorer, right-click the Controllers folder and choose Add, Controller.

    Aggiungi controller

  3. Scegliere Controller MVC 5 con visualizzazioni, che usa Entity Framework e quindi fare clic su Aggiungi.Choose MVC 5 Controller with views, using Entity Framework, and click Add. Se viene visualizzato un errore dopo la selezione di Aggiungi, assicurarsi prima di tutto di avere compilato il progetto.If you get an error after clicking Add, ensure that you have built the project first.

    Aggiunta di una classe controller

  4. Selezionare Team (ContosoTeamStats.Models) dall'elenco a discesa Classe modello.Select Team (ContosoTeamStats.Models) from the Model class drop-down list. Selezionare TeamContext (ContosoTeamStats.Models) dall'elenco a discesa Classe del contesto dei dati.Select TeamContext (ContosoTeamStats.Models) from the Data context class drop-down list. Immettere TeamsController nella casella di testo Nome controller , se non è stata popolata automaticamente.Type TeamsController in the Controller name textbox (if it is not automatically populated). Fare clic su Aggiungi per creare la classe controller e aggiungere le visualizzazioni predefinite.Click Add to create the controller class and add the default views.

    Configura controller

  5. In Esplora soluzioni espandere Global.asax e fare doppio clic su Global.asax.cs per aprirlo.In Solution Explorer, expand Global.asax and double-click Global.asax.cs to open it.

    Global.asax.cs

  6. Aggiungere le due istruzioni using seguenti all'inizio del file, dopo le altre due istruzioni using.Add the following two using statements at the top of the file under the other using statements.

    using System.Data.Entity;
    using ContosoTeamStats.Models;
    
  7. Aggiungere la riga di codice seguente alla fine del metodo Application_Start .Add the following line of code at the end of the Application_Start method.

    Database.SetInitializer<TeamContext>(new TeamInitializer());
    
  8. In Esplora soluzioni espandere App_Start e fare doppio clic su RouteConfig.cs.In Solution Explorer, expand App_Start and double-click RouteConfig.cs.

    RouteConfig.cs

  9. Sostituire controller = "Home" nel codice seguente nel metodo RegisterRoutes con controller = "Teams", come illustrato nell'esempio seguente.Replace controller = "Home" in the following code in the RegisterRoutes method with controller = "Teams" as shown in the following example.

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Teams", action = "Index", id = UrlParameter.Optional }
    );
    

Configurare le visualizzazioniConfigure the views

  1. In Esplora soluzioni espandere la cartella Visualizzazioni, quindi la cartella Condiviso e infine fare doppio clic su _Layout.cshtml.In Solution Explorer, expand the Views folder and then the Shared folder, and double-click _Layout.cshtml.

    file _Layout.cshtml

  2. Cambiare il contenuto dell'elemento title e sostituire My ASP.NET Application con Contoso Team Stats, come illustrato nell'esempio seguente.Change the contents of the title element and replace My ASP.NET Application with Contoso Team Stats as shown in the following example.

    <title>@ViewBag.Title - Contoso Team Stats</title>
    
  3. Nella sezione body aggiornare la prima istruzione Html.ActionLink e sostituire Application name con Contoso Team Stats, quindi sostituire Home con Teams.In the body section, update the first Html.ActionLink statement and replace Application name with Contoso Team Stats and replace Home with Teams.

    • Prima: @Html.ActionLink("Application name", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" })Before: @Html.ActionLink("Application name", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" })
    • Dopo: @Html.ActionLink("Contoso Team Stats", "Index", "Teams", new { area = "" }, new { @class = "navbar-brand" })After: @Html.ActionLink("Contoso Team Stats", "Index", "Teams", new { area = "" }, new { @class = "navbar-brand" })

      Modifiche al codice

  4. Premere CTRL+F5 per compilare ed eseguire l'applicazione.Press Ctrl+F5 to build and run the application. Questa versione dell'applicazione legge i risultati direttamente dal database.This version of the application reads the results directly from the database. Si notino le azioni Crea nuovo, Modifica, Dettagli ed Elimina aggiunte automaticamente all'applicazione dallo scaffolding Controller MVC 5 con visualizzazioni, che usa Entity Framework.Note the Create New, Edit, Details, and Delete actions that were automatically added to the application by the MVC 5 Controller with views, using Entity Framework scaffold. Nella sezione successiva dell'esercitazione verrà aggiunta la cache Redis, per ottimizzare l'accesso ai dati e fornire funzionalità aggiuntive all'applicazione.In the next section of the tutorial you'll add Redis Cache to optimize the data access and provide additional features to the application.

Applicazione iniziale

Configurare l'applicazione per l'uso della cache RedisConfigure the application to use Redis Cache

In questa sezione dell'esercitazione verrà configurata l'applicazione di esempio per archiviare e recuperare le statistiche del team Contoso da un'istanza della cache Redis di Azure usando il client StackExchange.Redis della cache.In this section of the tutorial, you'll configure the sample application to store and retrieve Contoso team statistics from an Azure Redis Cache instance by using the StackExchange.Redis cache client.

Configurare l'applicazione per l'uso di StackExchange.RedisConfigure the application to use StackExchange.Redis

  1. Per configurare un'applicazione client in Visual Studio con il pacchetto NuGet StackExchange.Redis, fare clic su Gestione pacchetti NuGet e quindi su Console di Gestione pacchetti dal menu Strumenti.To configure a client application in Visual Studio using the StackExchange.Redis NuGet package, click NuGet Package Manager, Package Manager Console from the Tools menu.
  2. Eseguire questo comando seguente dalla finestra Package Manager Console.Run the following command from the Package Manager Console window.

    Install-Package StackExchange.Redis
    

    Il pacchetto NuGet scarica e aggiunge i riferimenti ad assembly necessari per consentire all'applicazione client di accedere a Cache Redis di Azure con il client della cache StackExchange.Redis.The NuGet package downloads and adds the required assembly references for your client application to access Azure Redis Cache with the StackExchange.Redis cache client. Se si preferisce usare una versione con nome sicuro della libreria client StackExchange.Redis, installare il pacchetto StackExchange.Redis.StrongName.If you prefer to use a strong-named version of the StackExchange.Redis client library, install the StackExchange.Redis.StrongName package.

  3. In Esplora soluzioni espandere la cartella Controller e fare doppio clic su TeamsController.cs per aprirlo.In Solution Explorer, expand the Controllers folder and double-click TeamsController.cs to open it.

    Controller Teams

  4. Aggiungere le due istruzioni using seguenti a TeamsController.cs.Add the following two using statements to TeamsController.cs.

    using System.Configuration;
    using StackExchange.Redis;
    
  5. Aggiungere le due proprietà seguenti alla classe TeamsController .Add the following two properties to the TeamsController class.

    // Redis Connection string info
    private static Lazy<ConnectionMultiplexer> lazyConnection = new Lazy<ConnectionMultiplexer>(() =>
    {
        string cacheConnection = ConfigurationManager.AppSettings["CacheConnection"].ToString();
        return ConnectionMultiplexer.Connect(cacheConnection);
    });
    
    public static ConnectionMultiplexer Connection
    {
        get
        {
            return lazyConnection.Value;
        }
    }
    
  6. Creare un file nel computer denominato WebAppPlusCacheAppSecrets.config e inserirlo in una posizione che non verrà archiviata con il codice sorgente dell'applicazione di esempio, nel caso in cui si decidesse di archiviarlo.Create a file on your computer named WebAppPlusCacheAppSecrets.config and place it in a location that won't be checked in with the source code of your sample application, should you decide to check it in somewhere. In questo esempio il file AppSettingsSecrets.config si trova in C:\AppSecrets\WebAppPlusCacheAppSecrets.config.In this example the AppSettingsSecrets.config file is located at C:\AppSecrets\WebAppPlusCacheAppSecrets.config.

    Modificare il file WebAppPlusCacheAppSecrets.config e aggiungere il contenuto seguente.Edit the WebAppPlusCacheAppSecrets.config file and add the following contents. Se si esegue localmente l'applicazione, queste informazioni vengono usate per connettersi all'istanza della cache Redis di Azure.If you run the application locally this information is used to connect to your Azure Redis Cache instance. Successivamente nell'esercitazione verrà effettuato il provisioning di un'istanza della cache Redis di Azure e verranno aggiornati il nome e la password della cache.Later in the tutorial you'll provision an Azure Redis Cache instance and update the cache name and password. Se non si prevede di eseguire localmente l'applicazione di esempio, è possibile ignorare la creazione di questo file e i passaggi successivi che fanno riferimento al file, perché, quando si esegue la distribuzione in Azure, l'applicazione recupera le informazioni di connessione della cache dall'impostazione dell'app per l'app Web, non da questo file.If you don't plan to run the sample application locally you can skip the creation of this file and the subsequent steps that reference the file, because when you deploy to Azure the application retrieves the cache connection information from the app setting for the Web App and not from this file. Poiché WebAppPlusCacheAppSecrets.config non viene distribuito in Azure con l'applicazione, sarà necessario solo se si esegue l'applicazione localmente.Since the WebAppPlusCacheAppSecrets.config is not deployed to Azure with your application, you don't need it unless you are going to run the application locally.

    <appSettings>
      <add key="CacheConnection" value="MyCache.redis.cache.windows.net,abortConnect=false,ssl=true,password=..."/>
    </appSettings>
    
  7. In Esplora soluzioni fare doppio clic su web.config per aprirlo.In Solution Explorer, double-click web.config to open it.

    Web.config

  8. Aggiungere l'attributo file seguente all'elemento appSettings.Add the following file attribute to the appSettings element. Se è stato usato un nome o un percorso di file diverso, sostituire i valori dell'esempio con questi valori.If you used a different file name or location, substitute those values for the ones shown in the example.

    • Prima: <appSettings>Before: <appSettings>
    • Dopo: <appSettings file="C:\AppSecrets\WebAppPlusCacheAppSecrets.config">After: <appSettings file="C:\AppSecrets\WebAppPlusCacheAppSecrets.config">

    Il runtime ASP.NET unisce il contenuto del file esterno con il markup nell'elemento <appSettings> .The ASP.NET runtime merges the contents of the external file with the markup in the <appSettings> element. Il runtime ignora l'attributo del file, se non è possibile trovare il file specificato.The runtime ignores the file attribute if the specified file cannot be found. I segreti, ovvero la stringa di connessione per la cache, non sono inclusi come parte del codice sorgente per l'applicazione.Your secrets (the connection string to your cache) are not included as part of the source code for the application. Quando si distribuisce l'app Web in Azure, il file WebAppPlusCacheAppSecrests.config non verrà distribuito (approccio consigliato).When you deploy your web app to Azure, the WebAppPlusCacheAppSecrests.config file won't be deployed (that's what you want). È possibile specificare in molti modi questi segreti in Azure e in questa esercitazione vengono configurati automaticamente quando si effettua il provisioning delle risorse di Azure in un passaggio successivo dell'esercitazione.There are several ways to specify these secrets in Azure, and in this tutorial they are configured automatically for you when you provision the Azure resources in a subsequent tutorial step. Per altre informazioni sull'uso dei segreti in Azure, vedere l'articolo Best practices for deploying passwords and other sensitive data to ASP.NET and Azure App Service(Procedure consigliate per la distribuzione di password e altri dati sensibili in ASP.NET e nel servizio app di Azure).For more information about working with secrets in Azure, see Best practices for deploying passwords and other sensitive data to ASP.NET and Azure App Service.

Aggiornare la classe TeamsController per restituire risultati dalla cache o dal databaseUpdate the TeamsController class to return results from the cache or the database

In questo esempio è possibile recuperare le statistiche del team dal database o dalla cache.In this sample, team statistics can be retrieved from the database or from the cache. Le statistiche del team vengono archiviate nella cache come elemento List<Team>serializzato e anche come set ordinato usando tipi di dati Redis.Team statistics are stored in the cache as a serialized List<Team>, and also as a sorted set using Redis data types. Quando si recuperano elementi da un set ordinato, è possibile recuperare alcuni o tutti gli elementi o eseguire query per determinati elementi.When retrieving items from a sorted set, you can retrieve some, all, or query for certain items. In questo esempio verrà eseguita una query sul set ordinato per i primi cinque team classificati in base al numero di vittorie.In this sample you'll query the sorted set for the top 5 teams ranked by number of wins.

Nota

Per usare la cache Redis di Azure, non è necessario archiviare le statistiche del team in più formati nella cache.It is not required to store the team statistics in multiple formats in the cache in order to use Azure Redis Cache. Questa esercitazione usa più formati per illustrare alcuni dei modi diversi e dei tipi di dati diversi che è possibile usare per memorizzare i dati nella cache.This tutorial uses multiple formats to demonstrate some of the different ways and different data types you can use to cache data.

  1. Aggiungere le istruzioni using seguenti nella parte iniziale del file TeamsController.cs, insieme alle altre istruzioni using.Add the following using statements to the TeamsController.cs file at the top with the other using statements.

    using System.Diagnostics;
    using Newtonsoft.Json;
    
  2. Sostituire l'implementazione del metodo public ActionResult Index() corrente con l'implementazione seguente.Replace the current public ActionResult Index() method implementation with the following implementation.

    // GET: Teams
    public ActionResult Index(string actionType, string resultType)
    {
        List<Team> teams = null;
    
        switch(actionType)
        {
            case "playGames": // Play a new season of games.
                PlayGames();
                break;
    
            case "clearCache": // Clear the results from the cache.
                ClearCachedTeams();
                break;
    
            case "rebuildDB": // Rebuild the database with sample data.
                RebuildDB();
                break;
        }
    
        // Measure the time it takes to retrieve the results.
        Stopwatch sw = Stopwatch.StartNew();
    
        switch(resultType)
        {
            case "teamsSortedSet": // Retrieve teams from sorted set.
                teams = GetFromSortedSet();
                break;
    
            case "teamsSortedSetTop5": // Retrieve the top 5 teams from the sorted set.
                teams = GetFromSortedSetTop5();
                break;
    
            case "teamsList": // Retrieve teams from the cached List<Team>.
                teams = GetFromList();
                break;
    
            case "fromDB": // Retrieve results from the database.
            default:
                teams = GetFromDB();
                break;
        }
    
        sw.Stop();
        double ms = sw.ElapsedTicks / (Stopwatch.Frequency / (1000.0));
    
        // Add the elapsed time of the operation to the ViewBag.msg.
        ViewBag.msg += " MS: " + ms.ToString();
    
        return View(teams);
    }
    
  3. Aggiungere i tre metodi seguenti alla classe TeamsController per implementare i tipi di azione playGames, clearCache e rebuildDB dall'istruzione switch aggiunta nel frammento di codice precedente.Add the following three methods to the TeamsController class to implement the playGames, clearCache, and rebuildDB action types from the switch statement added in the previous code snippet.

    Il metodo PlayGames aggiorna le statistiche del team simulando una stagione di partite, salva i risultati nel database e cancella i dati ora obsoleti dalla cache.The PlayGames method updates the team statistics by simulating a season of games, saves the results to the database, and clears the now outdated data from the cache.

    void PlayGames()
    {
        ViewBag.msg += "Updating team statistics. ";
        // Play a "season" of games.
        var teams = from t in db.Teams
                    select t;
    
        Team.PlayGames(teams);
    
        db.SaveChanges();
    
        // Clear any cached results
        ClearCachedTeams();
    }
    

    Il metodo RebuildDB inizializza di nuovo il database con il set predefinito di team, genera le rispettive statistiche e cancella i dati ora obsoleti dalla cache.The RebuildDB method reinitializes the database with the default set of teams, generates statistics for them, and clears the now outdated data from the cache.

    void RebuildDB()
    {
        ViewBag.msg += "Rebuilding DB. ";
        // Delete and re-initialize the database with sample data.
        db.Database.Delete();
        db.Database.Initialize(true);
    
        // Clear any cached results
        ClearCachedTeams();
    }
    

    Il metodo ClearCachedTeams rimuove dalla cache eventuali statistiche del team memorizzate.The ClearCachedTeams method removes any cached team statistics from the cache.

    void ClearCachedTeams()
    {
        IDatabase cache = Connection.GetDatabase();
        cache.KeyDelete("teamsList");
        cache.KeyDelete("teamsSortedSet");
        ViewBag.msg += "Team data removed from cache. ";
    } 
    
  4. Aggiungere i quattro metodi seguenti alla classe TeamsController per implementare diversi modi di recupero per le statistiche del team dalla cache e dal database.Add the following four methods to the TeamsController class to implement the various ways of retrieving the team statistics from the cache and the database. Ogni metodo restituisce un valore List<Team> , che viene quindi mostrato nella visualizzazione.Each of these methods returns a List<Team> which is then displayed by the view.

    Il metodo GetFromDB legge le statistiche del team dal database.The GetFromDB method reads the team statistics from the database.

    List<Team> GetFromDB()
    {
        ViewBag.msg += "Results read from DB. ";
        var results = from t in db.Teams
            orderby t.Wins descending
            select t; 
    
        return results.ToList<Team>();
    }
    

    Il metodo GetFromList legge le statistiche del team dalla cache, come elemento List<Team> serializzato.The GetFromList method reads the team statistics from cache as a serialized List<Team>. In caso di mancato riscontro nella cache, le statistiche del team vengono lette dal database e quindi archiviate nella cache per la volta successiva.If there is a cache miss, the team statistics are read from the database and then stored in the cache for next time. In questo esempio viene usata la serializzazione JSON.NET per serializzare gli oggetti .NET verso e dalla cache.In this sample we're using JSON.NET serialization to serialize the .NET objects to and from the cache. Per altre informazioni, vedere Come usare gli oggetti .NET nella cache Redis di Azure.For more information, see How to work with .NET objects in Azure Redis Cache.

    List<Team> GetFromList()
    {
        List<Team> teams = null;
    
        IDatabase cache = Connection.GetDatabase();
        string serializedTeams = cache.StringGet("teamsList");
        if (!String.IsNullOrEmpty(serializedTeams))
        {
            teams = JsonConvert.DeserializeObject<List<Team>>(serializedTeams);
    
            ViewBag.msg += "List read from cache. ";
        }
        else
        {
            ViewBag.msg += "Teams list cache miss. ";
            // Get from database and store in cache
            teams = GetFromDB();
    
            ViewBag.msg += "Storing results to cache. ";
            cache.StringSet("teamsList", JsonConvert.SerializeObject(teams));
        }
        return teams;
    }
    

    Il metodo GetFromSortedSet legge le statistiche del team da un set ordinato memorizzato nella cache.The GetFromSortedSet method reads the team statistics from a cached sorted set. In caso di mancato riscontro nella cache, le statistiche del team vengono lette dal database e archiviate nella cache come set ordinato.If there is a cache miss, the team statistics are read from the database and stored in the cache as a sorted set.

    List<Team> GetFromSortedSet()
    {
        List<Team> teams = null;
        IDatabase cache = Connection.GetDatabase();
        // If the key teamsSortedSet is not present, this method returns a 0 length collection.
        var teamsSortedSet = cache.SortedSetRangeByRankWithScores("teamsSortedSet", order: Order.Descending);
        if (teamsSortedSet.Count() > 0)
        {
            ViewBag.msg += "Reading sorted set from cache. ";
            teams = new List<Team>();
            foreach (var t in teamsSortedSet)
            {
                Team tt = JsonConvert.DeserializeObject<Team>(t.Element);
                teams.Add(tt);
            }
        }
        else
        {
            ViewBag.msg += "Teams sorted set cache miss. ";
    
            // Read from DB
            teams = GetFromDB();
    
            ViewBag.msg += "Storing results to cache. ";
            foreach (var t in teams)
            {
                Console.WriteLine("Adding to sorted set: {0} - {1}", t.Name, t.Wins);
                cache.SortedSetAdd("teamsSortedSet", JsonConvert.SerializeObject(t), t.Wins);
            }
        }
        return teams;
    }
    

    Il metodo GetFromSortedSetTop5 legge i primi cinque team dal set ordinato memorizzato nella cache.The GetFromSortedSetTop5 method reads the top 5 teams from the cached sorted set. Controlla prima di tutto la cache per verificare l'esistenza della chiave teamsSortedSet .It starts by checking the cache for the existence of the teamsSortedSet key. Se la chiave non è presente, viene chiamato il metodo GetFromSortedSet per leggere le statistiche del team e archiviarle nella cache.If this key is not present, the GetFromSortedSet method is called to read the team statistics and store them in the cache. Il set ordinato memorizzato nella cache viene quindi sottoposto a query alla ricerca dei primi cinque team, che vengono restituiti.Next, the cached sorted set is queried for the top 5 teams which are returned.

    List<Team> GetFromSortedSetTop5()
    {
        List<Team> teams = null;
        IDatabase cache = Connection.GetDatabase();
    
        // If the key teamsSortedSet is not present, this method returns a 0 length collection.
        var teamsSortedSet = cache.SortedSetRangeByRankWithScores("teamsSortedSet", stop: 4, order: Order.Descending);
        if(teamsSortedSet.Count() == 0)
        {
            // Load the entire sorted set into the cache.
            GetFromSortedSet();
    
            // Retrieve the top 5 teams.
            teamsSortedSet = cache.SortedSetRangeByRankWithScores("teamsSortedSet", stop: 4, order: Order.Descending);
        }
    
        ViewBag.msg += "Retrieving top 5 teams from cache. ";
        // Get the top 5 teams from the sorted set
        teams = new List<Team>();
        foreach (var team in teamsSortedSet)
        {
            teams.Add(JsonConvert.DeserializeObject<Team>(team.Element));
        }
        return teams;
    }
    

Aggiornare i metodi Create, Edit e Delete per l'interazione con la cacheUpdate the Create, Edit, and Delete methods to work with the cache

Il codice di scaffolding generato come parte di questo esempio include metodi per l'aggiunta, la modifica e l'eliminazione di elementi.The scaffolding code that was generated as part of this sample includes methods to add, edit, and delete teams. Quando un team viene aggiunto, modificato o rimosso, i dati nella cache diventano obsoleti.Anytime a team is added, edited, or removed, the data in the cache becomes outdated. In questa sezione verranno modificati questi tre metodi per cancellare i team memorizzati nella cache, in modo che la cache non risulti non sincronizzata con il database.In this section you'll modify these three methods to clear the cached teams so that the cache won't be out of sync with the database.

  1. Passare al metodo Create(Team team) nella classe TeamsController.Browse to the Create(Team team) method in the TeamsController class. Aggiungere una chiamata al metodo ClearCachedTeams , come illustrato nell'esempio seguente.Add a call to the ClearCachedTeams method, as shown in the following example.

    // POST: Teams/Create
    // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
    // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create([Bind(Include = "ID,Name,Wins,Losses,Ties")] Team team)
    {
        if (ModelState.IsValid)
        {
            db.Teams.Add(team);
            db.SaveChanges();
            // When a team is added, the cache is out of date.
            // Clear the cached teams.
            ClearCachedTeams();
            return RedirectToAction("Index");
        }
    
        return View(team);
    }
    
  2. Passare al metodo Edit(Team team) nella classe TeamsController.Browse to the Edit(Team team) method in the TeamsController class. Aggiungere una chiamata al metodo ClearCachedTeams , come illustrato nell'esempio seguente.Add a call to the ClearCachedTeams method, as shown in the following example.

    // POST: Teams/Edit/5
    // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
    // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit([Bind(Include = "ID,Name,Wins,Losses,Ties")] Team team)
    {
        if (ModelState.IsValid)
        {
            db.Entry(team).State = EntityState.Modified;
            db.SaveChanges();
            // When a team is edited, the cache is out of date.
            // Clear the cached teams.
            ClearCachedTeams();
            return RedirectToAction("Index");
        }
        return View(team);
    }
    
  3. Passare al metodo DeleteConfirmed(int id) nella classe TeamsController.Browse to the DeleteConfirmed(int id) method in the TeamsController class. Aggiungere una chiamata al metodo ClearCachedTeams , come illustrato nell'esempio seguente.Add a call to the ClearCachedTeams method, as shown in the following example.

    // POST: Teams/Delete/5
    [HttpPost, ActionName("Delete")]
    [ValidateAntiForgeryToken]
    public ActionResult DeleteConfirmed(int id)
    {
        Team team = db.Teams.Find(id);
        db.Teams.Remove(team);
        db.SaveChanges();
        // When a team is deleted, the cache is out of date.
        // Clear the cached teams.
        ClearCachedTeams();
        return RedirectToAction("Index");
    }
    

Aggiornare la visualizzazione Index dei team per l'interazione con la cacheUpdate the Teams Index view to work with the cache

  1. In Esplora soluzioni espandere la cartella Visualizzazioni, quindi la cartella Team e fare doppio clic su Index.cshtml.In Solution Explorer, expand the Views folder, then the Teams folder, and double-click Index.cshtml.

    Index.cshtml

  2. Cercare l'elemento paragrafo seguente nella parte superiore del file.Near the top of the file, look for the following paragraph element.

    Tabella delle azioni

    Questo è il collegamento per la creazione di un nuovo team.This is the link to create a new team. Sostituire l'elemento paragrafo con la tabella seguente.Replace the paragraph element with the following table. Questa tabella include collegamenti alle azioni per la creazione di un nuovo team, l'avvio di una nuova stagione di partite, la cancellazione della cache, il recupero dei team dalla cache in diversi formati, il recupero di team dal database e la ricompilazione del database con dati di esempio aggiornati.This table has action links for creating a new team, playing a new season of games, clearing the cache, retrieving the teams from the cache in several formats, retrieving the teams from the database, and rebuilding the database with fresh sample data.

    <table class="table">
        <tr>
            <td>
                @Html.ActionLink("Create New", "Create")
            </td>
            <td>
                @Html.ActionLink("Play Season", "Index", new { actionType = "playGames" })
            </td>
            <td>
                @Html.ActionLink("Clear Cache", "Index", new { actionType = "clearCache" })
            </td>
            <td>
                @Html.ActionLink("List from Cache", "Index", new { resultType = "teamsList" })
            </td>
            <td>
                @Html.ActionLink("Sorted Set from Cache", "Index", new { resultType = "teamsSortedSet" })
            </td>
            <td>
                @Html.ActionLink("Top 5 Teams from Cache", "Index", new { resultType = "teamsSortedSetTop5" })
            </td>
            <td>
                @Html.ActionLink("Load from DB", "Index", new { resultType = "fromDB" })
            </td>
            <td>
                @Html.ActionLink("Rebuild DB", "Index", new { actionType = "rebuildDB" })
            </td>
        </tr>    
    </table>
    
  3. Passare alla parte finale del file Index.cshtml e aggiungere l'elemento tr seguente, in modo che costituisca l'ultima riga dell'ultima tabella del file.Scroll to the bottom of the Index.cshtml file and add the following tr element so that it is the last row in the last table in the file.

    <tr><td colspan="5">@ViewBag.Msg</td></tr>
    

    Questa riga mostra il valore di ViewBag.Msg che contiene un rapporto sullo stato relativo all'operazione corrente.This row displays the value of ViewBag.Msg which contains a status report about the current operation. ViewBag.Msg viene impostato quando si fa clic su uno dei collegamenti all'azione del passaggio precedente.The ViewBag.Msg is set when you click any of the action links from the previous step.

    Messaggio di stato

  4. Premere F6 per compilare il progetto.Press F6 to build the project.

provisioning delle risorse di AzureProvision the Azure resources

Per ospitare l'applicazione in Azure, è prima di tutto necessario effettuare il provisioning dei servizi di Azure richiesti dall'applicazione.To host your application in Azure, you must first provision the Azure services that your application requires. L'applicazione di esempio di questa esercitazione usa i servizi di Azure seguenti.The sample application in this tutorial uses the following Azure services.

  • Cache Redis di AzureAzure Redis Cache
  • App Web del servizio appApp Service Web App
  • Database SQLSQL Database

Per distribuire questi servizi in un gruppo di risorse nuovo o esistente, fare clic sul pulsante Distribuisci in Azure seguente.To deploy these services to a new or existing resource group of your choice, click the following Deploy to Azure button.

Distribuzione in AzureDeploy to Azure

Il pulsante Distribuisci in Azure usa il modello per creare un'app Web con cache Redis e database SQL di Avvio rapido di Azure per effettuare il provisioning di questi servizi e configurare la stringa di connessione per il database SQL e l'impostazione dell'applicazione per la stringa di connessione della cache Redis di Azure.This Deploy to Azure button uses the Create a Web App plus Redis Cache plus SQL Database Azure Quickstart template to provision these services and set the connection string for the SQL Database and the application setting for the Azure Redis Cache connection string.

Nota

Se non si ha un account Azure, è possibile creare un account Azure gratuito in pochi minuti.If you don't have an Azure account, you can create a free Azure account in just a couple of minutes.

Se si fa clic sul pulsante Distribuisci in Azure , verrà aperto il portale di Azure e verrà avviato il processo di creazione delle risorse descritte dal modello.Clicking the Deploy to Azure button takes you to the Azure portal and initiates the process of creating the resources described by the template.

Distribuzione in Azure

  1. Nella sezione Informazioni di base selezionare la sottoscrizione di Azure da usare, quindi selezionare un gruppo di risorse esistente o crearne uno nuovo e infine specificare la posizione del gruppo di risorse.In the Basics section, select the Azure subscription to use, and select an existing resource group or create a new one, and specify the resource group location.
  2. Nella sezione Impostazioni specificare un account di accesso amministratore diverso da admin, la password di accesso dell'amministratore e il nome del database.In the Settings section, specify an Administrator Login (don't use admin), Administrator Login Password, and Database Name. Gli altri parametri vengono configurati per un piano di hosting del Servizio app gratuito e per i piani con opzioni di costo inferiori per il database SQL e la Cache Redis di Azure, non disponibili con un livello gratuito.The other parameters are configured for a free App Service hosting plan, and lower-cost options for the SQL Database and Azure Redis Cache, which don't come with a free tier.

    Distribuzione in Azure

  3. Dopo avere configurato le impostazioni desiderate, scorrere fino alla fine della pagina, leggere i termini e le condizioni e selezionare la casella di controllo Accetto le condizioni riportate sopra.After configuring the desired settings, scroll to the end of the page, read the terms and conditions, and check the I agree to the terms and conditions stated above checkbox.

  4. Per iniziare il provisioning delle risorse, fare clic su Acquista.To begin provisioning the resources, click Purchase.

Per visualizzare lo stato della distribuzione, fare clic sull'icona di notifica e quindi su La distribuzione è stata avviata.To view the progress of your deployment, click the notification icon and click Deployment started.

La distribuzione è stata avviata

È possibile visualizzare lo stato della distribuzione nel pannello Microsoft.Template .You can view the status of your deployment on the Microsoft.Template blade.

Distribuisci in Azure

Al termine del provisioning, è possibile pubblicare l'applicazione in Azure da Visual Studio.When provisioning is complete, you can publish your application to Azure from Visual Studio.

Nota

Eventuali errori durante il processo di provisioning vengono visualizzati nel pannello Microsoft.Template .Any errors that may occur during the provisioning process are displayed on the Microsoft.Template blade. Gli errori comuni sono relativi a un numero eccessivo di server SQL o di piani di hosting del Servizio app gratuito per ogni sottoscrizione.Common errors are too many SQL Servers or too many Free App Service hosting plans per subscription. Risolvere eventuali errori e riavviare il processo facendo clic su Ridistribuisci nel pannello Microsoft.Template o sul pulsante Distribuisci in Azure in questa esercitazione.Resolve any errors and restart the process by clicking Redeploy on the Microsoft.Template blade or the Deploy to Azure button in this tutorial.

Pubblicare l'applicazione in AzurePublish the application to Azure

In questo passaggio dell'esercitazione l'applicazione verrà pubblicata in Azure e verrà eseguita sul cloud.In this step of the tutorial, you'll publish the application to Azure and run it in the cloud.

  1. Fare clic con il pulsante destro del mouse sul progetto ContosoTeamStats in Visual Studio e scegliere Pubblica.Right-click the ContosoTeamStats project in Visual Studio and choose Publish.

    Pubblica

  2. Fare clic su Servizio app di Microsoft Azure, scegliere Seleziona esistente e fare clic su Pubblica.Click Microsoft Azure App Service, choose Select Existing, and click Publish.

    Pubblica

  3. Selezionare la sottoscrizione usata durante la creazione delle risorse di Azure, espandere il gruppo di risorse contenente le risorse e scegliere l'app Web da usare.Select the subscription used when creating the Azure resources, expand the resource group containing the resources, and select the desired Web App. Se è stato usato il pulsante Distribuisci in Azure, il nome dell'app Web inizierà con webSite, seguito da caratteri aggiuntivi.If you used the Deploy to Azure button your Web App name starts with webSite followed by some additional characters.

    Selezione dell'app Web

  4. Fare clic su OK per iniziare il processo di pubblicazione.Click OK to begin the publishing process. Il processo di pubblicazione viene completato in pochi minuti e viene aperto un browser con l'applicazione di esempio in esecuzione.After a few moments the publishing process completes and a browser is launched with the running sample application. Se viene visualizzato un errore DNS durante la convalida o la pubblicazione e il processo di provisioning per le risorse di Azure per l'applicazione è stato completato di recente, attendere qualche minuto e riprovare.If you get a DNS error when validating or publishing, and the provisioning process for the Azure resources for the application has just recently completed, wait a moment and try again.

    Cache aggiunta

La tabella seguente illustra ogni collegamento all'azione dall'applicazione di esempio.The following table describes each action link from the sample application.

AzioneAction DescrizioneDescription
Creazione di un nuovo sitoCreate New Crea un nuovo team.Create a new Team.
Play SeasonPlay Season Avvia una stagione di partite, aggiorna le statistiche del team e cancella eventuali dati del team obsoleti dalla cache.Play a season of games, update the team stats, and clear any outdated team data from the cache.
Clear CacheClear Cache Cancella le statistiche del team dalla cache.Clear the team stats from the cache.
List from CacheList from Cache Recupera le statistiche del team dalla cache.Retrieve the team stats from the cache. In caso di mancato riscontro nella cache, carica le statistiche dal database e le salva nella cache per la volta successiva.If there is a cache miss, load the stats from the database and save to the cache for next time.
Sorted Set from CacheSorted Set from Cache Recupera le statistiche del team dalla cache usando un set ordinato.Retrieve the team stats from the cache using a sorted set. In caso di mancato riscontro nella cache, carica le statistiche dal database e le salva nella cache mediante un set ordinato.If there is a cache miss, load the stats from the database and save to the cache using a sorted set.
Top 5 Teams from CacheTop 5 Teams from Cache Recupera i primi cinque team dalla cache usando un set ordinato.Retrieve the top 5 teams from the cache using a sorted set. In caso di mancato riscontro nella cache, carica le statistiche dal database e le salva nella cache mediante un set ordinato.If there is a cache miss, load the stats from the database and save to the cache using a sorted set.
Load from DBLoad from DB Recupera le statistiche del team dal database.Retrieve the team stats from the database.
Rebuild DBRebuild DB Ricompila il database e lo ricarica con i dati del team di esempio.Rebuild the database and reload it with sample team data.
Edit / Details / DeleteEdit / Details / Delete Modifica un team, visualizza dettagli per un team, elimina un team.Edit a team, view details for a team, delete a team.

Fare clic su alcune azioni e provare a recuperare i dati dalle diverse origini.Click some of the actions and experiment with retrieving the data from the different sources. Notare le differenze a livello di tempo necessario per il completamento nelle varie modalità di recupero di dati dal database e dalla cache.Not the differences in the time it takes to complete the various ways of retrieving the data from the database and the cache.

Eliminare le risorse al termine dell'uso dell'applicazioneDelete the resources when you are finished with the application

Al termine dell'uso dell'applicazione di esempio dell'esercitazione, è possibile eliminare le risorse di Azure per ridurre i costi e l'uso di risorse.When you are finished with the sample tutorial application, you can delete the Azure resources used in order to conserve cost and resources. Se si usa il pulsante Distribuisci in Azure nella sezione Effettuare il provisioning delle risorse di Azure e se tutte le risorse sono contenute nello stesso gruppo di risorse, è possibile eliminarle tutte insieme in una sola operazione, eliminando il gruppo di risorse.If you use the Deploy to Azure button in the Provision the Azure resources section and all of your resources are contained in the same resource group, you can delete them together in one operation by deleting the resource group.

  1. Accedere al portale di Azure e fare clic su Gruppi di risorse.Sign in to the Azure portal and click Resource groups.
  2. Immettere il nome del gruppo di risorse nella casella di testo Filtra elementi .Type the name of your resource group into the Filter items... textbox.
  3. Fare clic su ... a destra del gruppo di risorse.Click ... to the right of your resource group.
  4. Fare clic su Elimina.Click Delete.

    Elimina

  5. Immettere il nome del gruppo di risorse e fare clic su Elimina.Type the name of your resource group and click Delete.

    Conferma dell'eliminazione

Dopo alcuni minuti il gruppo di risorse e tutte le risorse in esso contenute vengono eliminati.After a few moments the resource group and all of its contained resources are deleted.

Importante

Si noti che l'eliminazione di un gruppo di risorse è irreversibile e che il gruppo di risorse e tutte le risorse incluse nel gruppo vengono eliminati definitivamente.Note that deleting a resource group is irreversible and that the resource group and all the resources in it are permanently deleted. Assicurarsi di non eliminare accidentalmente il gruppo di risorse sbagliato o le risorse errate.Make sure that you do not accidentally delete the wrong resource group or resources. Se le risorse per l'hosting di questo esempio sono state create in un gruppo di risorse esistente, è possibile eliminare singolarmente ogni risorsa dal rispettivo pannello.If you created the resources for hosting this sample inside an existing resource group, you can delete each resource individually from their respective blades.

Eseguire l'applicazione di esempio nel computer localeRun the sample application on your local machine

Per eseguire l'applicazione localmente nel computer, è necessaria un'istanza della cache Redis di Azure in cui memorizzare i dati.To run the application locally on your machine, you need an Azure Redis Cache instance in which to cache your data.

  • Se l'applicazione è stata pubblicata in Azure come illustrato nella sezione precedente, è possibile usare l'istanza della cache Redis di Azure di cui è stato effettuato il provisioning in quel passaggio.If you have published your application to Azure as described in the previous section, you can use the Azure Redis Cache instance that was provisioned during that step.
  • Se è disponibile un'altra istanza esistente della cache Redis di Azure, è possibile usarla per eseguire localmente questo esempio.If you have another existing Azure Redis Cache instance, you can use that to run this sample locally.
  • Se è necessario creare un'istanza della cache Redis di Azure, è possibile seguire la procedura illustrata in Creare una cache.If you need to create an Azure Redis Cache instance, you can follow the steps in Create a cache.

Dopo la selezione o la creazione della cache da usare, passare alla cache nel portale di Azure e recuperare il nome host e le chiavi di accesso per la cache.Once you have selected or created the cache to use, browse to the cache in the Azure portal and retrieve the host name and access keys for your cache. Per istruzioni, vedere Configurare le impostazioni della cache Redis.For instructions, see Configure Redis cache settings.

  1. Aprire il file WebAppPlusCacheAppSecrets.config creato durante il passaggio Configurare l'applicazione per l'uso della cache Redis di questa esercitazione usando l'editor preferito.Open the WebAppPlusCacheAppSecrets.config file that you created during the Configure the application to use Redis Cache step of this tutorial using the editor of your choice.
  2. Modificare l'attributo value e sostituire MyCache.redis.cache.windows.net con il nome host della cache, quindi specificare la chiave primaria o secondaria della cache come password.Edit the value attribute and replace MyCache.redis.cache.windows.net with the host name of your cache, and specify either the primary or secondary key of your cache as the password.

    <appSettings>
      <add key="CacheConnection" value="MyCache.redis.cache.windows.net,abortConnect=false,ssl=true,password=..."/>
    </appSettings>
    
  3. Premere CTRL+F5 per eseguire l'applicazione.Press Ctrl+F5 to run the application.

Nota

Si noti che poiché l'applicazione, incluso il database, viene eseguita localmente e la Cache Redis è ospitata in Azure, è possibile che le prestazioni della cache risultino inferiori a quelle del database.Note that because the application, including the database, is running locally and the Redis Cache is hosted in Azure, the cache may appear to under-perform the database. Per prestazioni ottimali, l'applicazione client e la cache Redis di Azure devono trovarsi nella stessa posizione.For best performance, the client application and Azure Redis Cache instance should be in the same location.

Passaggi successiviNext steps