Öğretici: ASP.NET üzerinde edilgen önbellekli puan tablosu oluşturma

Bu öğreticide, Redis için Azure Cache --- için ASP.NEThızlı başlangıçta ASP.NET hızlı başlangıçta ASP.NET kötüle birlikte önbellek düzeni kullanan bir lider tablosu eklemek için ContosoTeamStats ASP.NET--- web uygulamasını Redis için Azure Cache. Örnek uygulama, veritabanındaki ekip istatistiklerinin listesini görüntüler. Ayrıca performansı artırmak için önbellekten Redis için Azure Cache ve almak için veri depolamanın farklı yollarını da gösterir. Öğreticiyi tamamlayan ve Azure'da barındırılan, veritabanına okuma ve yazma işlemi Redis için Azure Cache çalışan bir web uygulamasına sahip oluruz.

Bu öğreticide şunların nasıl yapıldığını öğreneceksiniz:

  • Veri aktarım hızını geliştirin ve verileri depolayarak ve alarak veritabanı yükünü Redis için Azure Cache.
  • En iyi beş takımı almak için bir Redis sıralanmış kümesi kullanma.
  • Resource Manager şablonunu kullanarak uygulama için Azure kaynakları sağlama.
  • Visual Studio kullanarak uygulamayı yayımlama.

Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

Önkoşullar

Bu öğreticiyi tamamlamak için aşağıdaki ön koşullara sahip olmanız gerekir:

Projeye puan tablosu ekleme

Öğreticinin bu bölümünde, kurgusal takımlar listesi için galibiyet, mağlubiyet ve berabere kalma istatistiklerini bildiren bir puan tablosu ile ContosoTeamStats projesini yapılandırırsınız.

Projeye Entity Framework ekleme

  1. Bu Visual Studio, ASP.NET için hızlı başlangıçta oluşturduğunuz ContosoTeamStats Çözümünü Redis için Azure Cache.

  2. Araçlar'ı > NuGet Paket Yöneticisi > Paket Yöneticisi Konsolu'nu seçin.

  3. EntityFramework’ü yüklemek için Paket Yöneticisi Konsolu penceresinden aşağıdaki komutu çalıştırın:

    Install-Package EntityFramework
    

Bu paket hakkında daha fazla bilgi için EntityFramework NuGet sayfasına bakın.

Takım modeli ekleme

  1. Çözüm Gezgini’nde Modeller’e sağ tıklayın ve Ekle, Sınıf’ı seçin.

  2. Sınıf Team adı olarak girin ve Ekle'yi seçin.

    Model sınıfı ekleme

  3. Team.cs dosyasının üst kısmındaki using deyimlerini aşağıdaki using deyimleriyle değiştirin:

    using System;
    using System.Collections.Generic;
    using System.Data.Entity;
    using System.Data.Entity.SqlServer;
    
  4. sınıfının tanımını, güncelleştirilmiş bir sınıf tanımını ve diğer bazı yardımcı sınıflarını içeren Team Team Entity Framework kod parçacığıyla değiştirin. Bu öğreticide, Entity Framework ile code first yaklaşımı kullanılmaktadır. Bu yaklaşım, Entity Framework’ün kodunuzdan veritabanını oluşturmasını sağlar. Bu öğreticide kullanılan Entity Framework için ilk kod yaklaşımı hakkında daha fazla bilgi için, bkz. Yeni bir veritabanına ilk kod.

    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. Bu Çözüm Gezgini, açmak için Web.config çift tıklayın.

    Web.config

  6. Aşağıdaki connectionStrings bölümünü configuration bölümüne ekleyin. Bağlantı dizesinin adı, Entity Framework veritabanı bağlamı sınıfının adı olan TeamContext ile eşleşmelidir.

    Bu bağlantı dizesi, Önkoşulları karşılamış ve SQL Server Express 2019 ile birlikte yüklenmiş .NET masaüstü geliştirme iş yükünün parçası olan Visual Studio yüklemişsinizdir.

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

    Aşağıdaki örnek, configuration bölümündeki configSections bölümünü izleyen yeni connectionStrings bölümünü gösterir:

    <configuration>
        <configSections>
        <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>
        ...
    

TeamsController ve görünümleri ekleme

  1. Visual Studio’da projeyi derleyin.

  2. Çözüm Gezgini'nde Denetleyiciler klasörüne sağ tıklayın ve Ekle, Denetleyici'yi seçin.

  3. Görünümlere sahip MVC 5 Denetleyicisi'Entity Framework ve Ekle'yi seçin. Ekle'yi seçdikten sonra bir hata alırsanız, önce projeyi 100.000.000'den önce 10.000.000'den önce 10.000.000

    Denetleyici sınıfı ekleme

  4. Model sınıfı açılır listesinden Ekip (ContosoTeamStats.Models) öğesini seçin. Veri bağlamı açılır listesinden TeamContext (ContosoTeamStats.Models) öğesini seçin. Denetleyici TeamsController adı metin kutusuna yazın (otomatik olarak doldurulmaması gerekir). Denetleyici sınıfını oluşturmak ve varsayılan görünümleri eklemek için Ekle'yi seçin.

    Denetleyici yapılandırma

  5. Çözüm Gezgini’nde, Global.asax öğesini genişletin ve Global.asax.cs’yi açmak için çift tıklayın.

    Global.asax.cs

  6. Aşağıdaki iki using deyimini dosyanın üst tarafındaki diğer using deyimlerinin altına ekleyin:

    using System.Data.Entity;
    using ContosoTeamStats.Models;
    
  7. Application_Start yönteminin sonuna aşağıdaki kod satırını ekleyin:

    Database.SetInitializer<TeamContext>(new TeamInitializer());
    
  8. Çözüm Gezgini’nde, App_Start öğesini genişletin ve RouteConfig.cs öğesine çift tıklayın.

    RouteConfig.cs

  9. RegisterRoutes yönteminde, Default rotasındaki controller = "Home" öğesini, aşağıdaki örnekte gösterildiği gibi controller = "Teams" ile değiştirin:

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

Düzen görünümünü yapılandırma

  1. Çözüm Gezgini’nde, Görünümler klasörünü ve ardından Paylaşılan klasörünü genişletin ve _Layout.cshtml öğesine çift tıklayın.

    _Layout.cshtml

  2. title öğesinin içeriğini değiştirin ve aşağıdaki örnekte gösterildiği gibi My ASP.NET Application öğesini Contoso Team Stats ile değiştirin:

    <title>@ViewBag.Title - Contoso Team Stats</title>
    
  3. bölümünde, Contoso Team Stats için aşağıdaki yeni deyimi test etmek için body Html.ActionLink bağlantının hemen altına Redis için Azure Cache ekleyin.

    @Html.ActionLink("Contoso Team Stats", "Index", "Teams", new { area = "" }, new { @class = "navbar-brand" })`
    

    Kod değişiklikleri

  4. Uygulamayı derleyip çalıştırmak için Ctrl+F5'e basın. Uygulamasının bu sürümü, sonuçları doğrudan veritabanından okur. Yeni Oluştur, Düzenle, Ayrıntılar ve Sil eylemlerinin Görünümlere sahip MVC 5 Denetleyici, Entity Framework kullanarak iskelesi tarafından otomatik olarak uygulamaya eklendiğini unutmayın. Öğreticinin sonraki bölümünde, veri erişimini iyileştirmek Redis için Azure Cache uygulamaya daha fazla özellik sağlamak için yeni özellikler ekleyebilirsiniz.

    Başlangıç uygulaması

Uygulamayı Redis için Azure Cache

Öğreticinin bu bölümünde, StackExchange.Redis önbellek istemcisini kullanarak bir Redis için Azure Cache Contoso ekip istatistiklerini depolamak ve almak için örnek uygulamayı yapılandırabilirsiniz.

Teams Controller’a önbellek bağlantısı ekleme

Hızlı başlangıçta StackExchange.Redis istemci kitaplığı paketini zaten yüklediniz. Ayrıca yayımlanan App Service ile ve yerel olarak kullanılmak üzere CacheConnection uygulama ayarını da yapılandırdınız. TeamsController’da bu aynı istemci kitaplığını ve CacheConnection bilgilerini kullanın.

  1. Çözüm Gezgini’nde, Denetleyiciler klasörünü genişletin ve TeamsController.cs öğesini açmak için çift tıklayın.

    Ekip denetleyicisi

  2. using TeamsController.cs'ye aşağıdaki iki deyimini ekleyin:

    using System.Configuration;
    using StackExchange.Redis;
    
  3. Aşağıdaki iki özelliği TeamsController sınıfına ekleyin:

    // 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;
        }
    }
    

Önbellekten veya veritabanından okumak için TeamsController’ı güncelleştirme

Bu örnekte, ekip istatistikleri veritabanı veya önbellekten alınabilir. Ekip istatistikleri seri hale getirilmiş bir List<Team> ve ayrıca, Redis veri türleri kullanılarak sıralanmış bir küme olarak veritabanında depolanır. Bir sıralanmış kümeden öğeleri alırken, belirli öğeler için bazı, tümü veya sorgu alabilirsiniz. Bu örnekte, kazanma sayısına göre sıralanmış ilk beş takım için sıralanmış kümeyi sorgulayabilirsiniz.

Ekip istatistiklerini önbellekte birden çok biçime depolar ve bu verileri Redis için Azure Cache. Bu öğretici, verileri önbelleğe almak için kullanabileceğiniz farklı yol ve farklı veri türlerinin bazılarını göstermek için birden çok biçim kullanır.

  1. Aşağıdaki using deyimlerini TeamsController.cs dosyasının üst tarafındaki diğer using deyimleri ile değiştirin:

    using System.Diagnostics;
    using Newtonsoft.Json;
    
  2. Geçerli public ActionResult Index() yöntemi uygulamasını aşağıdaki uygulama ile değiştirin:

    // 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. Önceki kod parçacığında eklenen switch deyiminden playGames, clearCache ve rebuildDB eylem türlerini uygulamak için aşağıdaki üç yöntemi TeamsController sınıfına ekleyin.

    PlayGames yöntemi, oyun sezonunu taklit ederek ekip istatistiklerini güncelleştirir, sonuçları veritabanına kaydeder ve artık güncel olmayan verileri veritabanından temizler.

    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();
    }
    

    RebuildDB yöntemi, varsayılan ekip kümesine sahip veritabanını yeniden başlatır, bunlar için istatistikler oluşturur ve artık güncel olmayan verileri veritabanından temizler.

    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();
    }
    

    ClearCachedTeams yöntemi önbelleğe alınan tüm ekip istatistiklerini önbellekten kaldırır.

    void ClearCachedTeams()
    {
        IDatabase cache = Connection.GetDatabase();
        cache.KeyDelete("teamsList");
        cache.KeyDelete("teamsSortedSet");
        ViewBag.msg += "Team data removed from cache. ";
    }
    
  4. Önbellek ve veritabanından ekip istatistiklerini almanın çeşitli yollarını uygulamak için aşağıdaki dört yöntemi TeamsController sınıfına ekleyin. Bu yöntemlerin her biri, daha sonra görünüm tarafından görüntülenen bir List<Team> döndürür.

    GetFromDB yöntemi veritabanından ekip istatistiklerini okur.

    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>();
    }
    

    GetFromList yöntemi önbellekteki ekip istatistiklerini seri hale getirilmiş bir List<Team> olarak okur. İstatistikler önbellekte yoksa önbellek isabeti oluşmaz. Önbellek isabetsizliği için, veritabanından takım istatistikleri okunur ve sonraki istek için önbellekte depolanır. Bu örnekte, önbelleğe veya önbellekten .NET nesnelerini seri hale getirmek için JSON.NET seri hale getirme kullanılmaktadır. Daha fazla bilgi için, bkz. How to work with .NET objects in Redis için Azure 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;
    }
    

    GetFromSortedSet yöntemi önbelleğe alınan bir sıralanmış kümeden ekip istatistiklerini okur. Önbellek isabeti yoksa, ekip istatistikleri veritabanından okunur ve önbellekte sıralanmış bir küme olarak depolanır.

    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;
    }
    

    GetFromSortedSetTop5 yöntemi, önbelleğe alınan sıralanmış kümeden en iyi 5 takımı okur. Bu, teamsSortedSet anahtarının varlığı için önbelleği denetleyerek başlar. Bu anahtar yoksa, ekip GetFromSortedSet istatistiklerini okumak ve bunları önbellekte depolamak için yöntemi çağrılır. Daha sonra önbelleğe alınan sıralanmış küme, döndürülen en iyi beş takım için sorgulanır.

    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;
    }
    

Önbellek ile çalışacak şekilde Oluştur, Düzenle ve Sil yöntemlerini güncelleştirme

Bu örneğin bir parçası olarak oluşturulan iskele kurma kodu ekip ekleme, düzenleme ve silme yöntemlerini içerir. Bir ekip her eklendiğinde, düzenlendiğinde veya kaldırıldığında önbellekteki veriler güncel olmayan hale gelir. Bu bölümde, önbelleğin yenilenmesi için önbelleğe alınan takımları temizlemek üzere bu üç yöntemi değiştireceksiniz.

  1. TeamsController sınıfındaki Create(Team team) yöntemine göz atın. Aşağıdaki örnekte gösterildiği gibi ClearCachedTeams yöntemine bir çağrı ekleyin:

    // POST: Teams/Create
    // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
    // more details see https://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. TeamsController sınıfındaki Edit(Team team) yöntemine göz atın. Aşağıdaki örnekte gösterildiği gibi ClearCachedTeams yöntemine bir çağrı ekleyin:

    // POST: Teams/Edit/5
    // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
    // more details see https://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. TeamsController sınıfındaki DeleteConfirmed(int id) yöntemine göz atın. Aşağıdaki örnekte gösterildiği gibi ClearCachedTeams yöntemine bir çağrı ekleyin:

    // 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");
    }
    

Takımlar Dizini görünümüne önbelleğe alma yöntemleri ekleme

  1. Çözüm Gezgini’nde, Görünümler klasörünü ve ardından Ekipler klasörünü genişletin ve Index.cshtml öğesine çift tıklayın.

    Index.cshtml

  2. Dosyanın en üstüne yakın bir yerde, aşağıdaki paragraf öğesini arayın:

    Eylem tablosu

    Bu bağlantı yeni bir takım oluşturur. Paragraf öğesini aşağıdaki tablo ile değiştirin. Bu tabloda yeni bir ekip oluşturmak, yeni bir oyun sezonu oynama, önbelleği temizleme, önbellekten ekipleri çeşitli biçimlerde alma, veritabanından ekipleri alma ve yeni örnek veriler ile veritabanını yeniden oluşturma eylemlerinin bağlantılarını içermektedir.

    <table class="table&quot;>
        <tr>
            <td>
                @Html.ActionLink(&quot;Create New&quot;, &quot;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. Index.cshtml dosyasının en altına kaydırın ve dosyadaki son tablonun son satırı olacak tr şekilde aşağıdaki öğeyi ekleyin:

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

    Bu satır, geçerli ViewBag.Msg işlemle ilgili bir durum raporu içeren değerini görüntüler. ViewBag.Msg, önceki adımda yer alan eylem bağlantılarından birini seçerek ayarlanır.

    Durum iletisi

  4. Projeyi derlemek için F6’ya basın.

Uygulamayı yerel olarak çalıştırma

Takımları desteklemek için eklenmiş olan işlevselliği doğrulamak üzere makinenizde yerel olarak uygulamayı çalıştırın.

Bu testte uygulama ve veritabanının her ikisi de yerel olarak çalışmaktadır. Yerel Redis için Azure Cache yerel değildir. Azure'da uzaktan barındırıldı. Bu nedenle önbellek büyük olasılıkla veritabanının biraz daha az performans sergileyene kadar devam ediyor olabilir. En iyi performans için istemci uygulaması Redis için Azure Cache örneği aynı konumda yer ala dır.

Sonraki bölümde, önbellek kullanımından gelen iyi performansı görmek için tüm kaynakları Azure'a dağıtın.

Uygulamayı yerel olarak çalıştırmak için:

  1. Uygulamayı çalıştırmak için Ctrl+F5 tuşlarına basın.

    Yerel olarak çalıştırılan uygulama

  2. Görünüme eklenen yeni yöntemlerin her birini test edin. Bu testlerde önbellek uzak olduğundan veritabanı, önbellek performansının üzerine çıkmalıdır.

Azure’da yayımlama ve çalıştırma

Uygulama için veritabanı sağlama

Bu bölümde, uygulamanın Azure'da barındırırken SQL Veritabanı için yeni bir veritabanı hazırlayacaksınız.

  1. Uygulamanın Azure portalsol üst köşesindeki Kaynak oluştur'Azure portal.

  2. Yeni sayfasında Veritabanları'SQL Veritabanı. >

  3. Yeni SQL Veritabanı için aşağıdaki ayarları kullanın:

    Ayar       Önerilen değer Açıklama 
    Veritabanı adı ContosoTeamsDatabase Geçerli veritabanı adları için bkz. Veritabanı Tanımlayıcıları.
    Abonelik Aboneliğiniz Önbelleği oluşturmak ve App Service’i barındırmak için kullandığınız aynı aboneliği seçin.
    Kaynak grubu TestResourceGroup Var olanını kullan'ı seçin ve önbelleğinizi yerleştirerek kaynak grubunu App Service.
    Kaynak seçme Boş veritabanı Boş bir veritabanıyla başlayın.
  4. Sunucu altında Gerekli ayarları yapılandır Yeni sunucu > oluştur'ı seçin, aşağıdaki bilgileri girin ve Seç düğmesini kullanın:

    Ayar       Önerilen değer Açıklama 
    Sunucu adı Genel olarak benzersiz bir ad Geçerli sunucu adları için bkz. Adlandırma kuralları ve kısıtlamalar.
    Sunucu yöneticisi oturum açma bilgileri Geçerli bir ad Geçerli oturum açma adları için bkz. Veritabanı Tanımlayıcıları.
    Parola Geçerli bir parola Parolanızda en az 8 karakter bulunmalı ve parolanız şu üç kategoriden karakterler içermelidir: büyük harf karakterler, küçük harf karakterler, sayılar ve alfasayısal olmayan karakterler.
    Konum Doğu ABD Önbelleği ve App Service’i oluşturduğunuz aynı bölgeyi seçin.
  5. Panoya sabitle'yi ve ardından Oluştur'a seçerek yeni veritabanını ve sunucuyu oluşturun.

  6. Yeni veritabanı oluşturulduktan sonra Veritabanı bağlantı dizelerini göster'i seçin ve ADO.NET dizesini kopyalayın.

    Bağlantı dizelerini göster

  7. Aşağıdaki Azure portal uygulamanıza gidin ve Uygulama App Service'Ayarlar'ı ve ardından Bağlantı dizeleri bölümünün altında Yeni bağlantı dizesi ekle'yi seçin.

  8. Entity Framework veritabanı bağlam sınıfıyla eşleşecek şekilde TeamContext adlı yeni bir bağlantı dizesi ekleyin. Yeni veritabanınız için bağlantı dizesini değer olarak yapıştırın. Bağlantı dizesinde aşağıdaki yer tutucuları değiştirerek Kaydet'i seçin:

    Yer tutucu Önerilen değer
    {your_username} Yeni oluşturduğunuz sunucu için sunucu yöneticisi oturum açma bilgilerini kullanın.
    {your_password} Yeni oluşturduğunuz sunucunun parolasını kullanın.

    Kullanıcı adı ve parolayı Bir Uygulama Ayarı olarak ekleyerek, kullanıcı adınız ve parolanız kodunuza dahil değildir. Bu yaklaşım, bu kimlik bilgilerinin korunmasına yardımcı olur.

Uygulama güncelleştirmelerini Azure’da yayımlama

Öğreticinin bu adımında, uygulamayı bulutta çalıştırmak üzere uygulama güncelleştirmelerini Azure’da yayımlayacaksınız.

  1. Içinde ContosoTeamStats projesini sağ seçin ve Visual Studio'yi seçin.

    Yayımlama

  2. Hızlı başlangıçta oluşturduğunuz yayımlama profilini kullanmak için Yayımla'yı seçin.

  3. Yayımlama tamamlandıktan sonra Visual Studio, uygulamayı varsayılan web tarayıcınızda başlatır.

    Önbellek eklendi

    Aşağıdaki tablo örnek uygulamadaki her eylem bağlantısını açıklar:

    Eylem Açıklama
    Yeni Oluştur Yeni bir Ekip oluşturun.
    Sezonu Oynat Oyun sezonunu oynatın, ekip istatistiklerini güncelleştirin ve veritabanından tüm güncel olmayan ekip verilerini temizleyin.
    Önbelleği Temizle Önbellekten ekip istatistiklerini temizleyin.
    Önbellekten Liste Önbellekten ekip istatistiklerini alın. Önbellek isabeti yoksa veritabanındaki istatistikleri yükleyecek ve bir sonraki sefer için önbelleğe kaydedebilirsiniz.
    Önbellekten Sıralanmış Küme Bir sıralanmış küme kullanarak önbellekten en iyi istatistiklerini alın. Önbellek isabet isabeti yoksa veritabanındaki istatistikleri yükleyecek ve sıralanmış bir küme kullanarak önbelleğe kaydedebilirsiniz.
    Önbellekteki En İyi 5 Ekip Bir sıralanmış küme kullanarak önbellekten en iyi 5 ekibi alın. Önbellek isabet isabeti yoksa veritabanındaki istatistikleri yükleyecek ve sıralanmış bir küme kullanarak önbelleğe kaydedebilirsiniz.
    DB’den yükleme Veritabanından ekip istatistiklerini alın.
    DB Yeniden Oluşturma Veritabanını yeniden oluşturun ve örnek ekip verileri ile yeniden yükleyin.
    Düzenle / Ayrıntılar / Sil Bir ekibi düzenleyin, ekibin ayrıntılarını görüntüleyin, ekibi silin.

Eylemlerden bazılarını seçin ve farklı kaynaklardan verileri alma denemesi gerçekleştirin. Veritabanı ve önbellekten veri almanın çeşitli yollarını tamamlamak için gereken süre arasındaki farklılıklara dikkat edin.

Kaynakları temizleme

Örnek öğretici uygulamasıyla bitirdikten sonra maliyet ve kaynak tasarrufu yapmak için Azure kaynaklarını silebilirsiniz. Tüm kaynaklarınız aynı kaynak grubunda yer alalır. Kaynak grubunu silerek bunları tek bir işlemde birlikte silebilirsiniz. Bu makaledeki yönergelerde TestResources adlı bir kaynak grubu kullanılmıştır.

Önemli

Bir kaynak grubunu silme işlemi geri alınamaz ve kaynak grubunun ve içindeki tüm kaynaklar kalıcı olarak silinir. Yanlış kaynak grubunu veya kaynakları yanlışlıkla silmediğinizden emin olun. Bu örneği tutmak istediğiniz kaynakları içeren mevcut bir kaynak grubunda barındırmak için kaynakları oluşturduysanız, her kaynağı sol tarafta ayrı ayrı silebilirsiniz.

  1. Azure portalda oturum açın ve Kaynak grupları’nı seçin.

  2. Öğeleri filtrele... metin kutusuna kaynak grubunuzun adını yazın.

  3. Kaynak grubu grubunun sağ tarafından ... öğesini seçin ve Kaynak grubunu sil'i seçin.

    Sil

  4. Kaynak grubunun silinmesini onaylamanız istenir. Onaylamak için kaynak grubu adının yazın ve Sil'i seçin.

    Birkaç dakika sonra kaynak grubu ve içerdiği kaynakların tümü silinir.

Sonraki adımlar