Aracılığıyla paylaş


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

Bu öğreticide, contosoTeamStats ASP.NET web uygulamasını güncelleştirin--- Redis için Azure Cache için ASP.NET hızlı başlangıcında oluşturacaksınız--- Redis için Azure Cache ile önbellekten ayrılmış deseni kullanan bir puan tablosu ekleyebilirsiniz. Örnek uygulama, bir veritabanındaki ekip istatistiklerinin listesini görüntüler. Ayrıca performansı artırmak için önbellekten veri depolamak ve almak için Redis için Azure Cache kullanmanın farklı yollarını gösterir. Öğreticiyi tamamladığınızda, bir veritabanını okuyan ve yazan, Redis için Azure Cache ile iyileştirilmiş ve Azure'da barındırılan çalışan bir web uygulamanız vardır.

Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:

  • Redis için Azure Cache kullanarak verileri depolayıp alarak veri aktarım hızını geliştirin ve veritabanı yükünü azaltın.
  • 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 birücretsiz Azure hesabı oluşturun.

Ön koşullar

Bu öğreticiyi tamamlamak için aşağıdaki önkoş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. Visual Studio'da, Redis için Azure Cache için ASP.NET hızlı başlangıcında oluşturduğunuz ContosoTeamStats Çözümünü açın.

  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 adı olarak girin Team ve Ekle'yi seçin.

    Add model class

  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ş Team bir sınıf tanımını Team ve diğer bazı Entity Framework yardımcı sınıflarını içeren aşağıdaki 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. Çözüm Gezgini’nde, Web.config’i açmak için ç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şıladığınız ve Visual Studio 2019 ile yüklenen .NET masaüstü geliştirme iş yükünün parçası olan SQL Server Express LocalDB'yi yüklediğiniz varsayılır.

    <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. Entity Framework kullanarak görünümlere sahip MVC 5 Denetleyicisi'ni seçin ve Ekle'yi seçin. Ekle'yi seçtikten sonra hata alırsanız, önce projeyi oluşturduğunuzdan emin olun.

    Add controller class

  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 adı metin kutusuna yazın TeamsController (otomatik olarak doldurulmazsa). Denetleyici sınıfını oluşturmak ve varsayılan görünümleri eklemek için Ekle'yi seçin.

    Configure controller

  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. body bölümünde, Redis için Azure Cache Test bağlantısının hemen altına Contoso Team Stats için aşağıdaki yeni Html.ActionLink deyimi ekleyin.

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

    Code changes

  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 ve uygulamaya daha fazla özellik sağlamak için Redis için Azure Cache ekleyeceksiniz.

    Starter application

Uygulamayı Redis için Azure Cache için yapılandırma

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

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.

    Teams controller

  2. TeamsController.cs deyimlerini kullanarak aşağıdaki iki using 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, kazanan sayısına göre sıralanan ilk beş takım için sıralanmış kümeyi sorgulayacaksınız.

Redis için Azure Cache kullanmak için ekip istatistiklerini önbellekte birden çok biçimde depolamak gerekmez. 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, önbellekte bir eksiklik oluşur. Ö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. Redis için Azure Cache'da .NET nesneleriyle çalışma.

    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 kaçırması varsa, 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, takım istatistiklerini GetFromSortedSet okumak ve ö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:

    Action table

    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">
        <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. Index.cshtml dosyasının en altına kaydırın ve dosyanın son tablosundaki son satır olması için aşağıdaki tr öğeyi ekleyin:

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

    Bu satır, geçerli işlemle ilgili bir durum raporu içeren değerini ViewBag.Msggörüntüler. ViewBag.Msg, önceki adımdaki eylem bağlantılarından herhangi birini seçtiğinizde ayarlanır.

    Status message

  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. Redis için Azure Cache yerel değil. Azure'da uzaktan barındırılır. Bu nedenle önbellek büyük olasılıkla veritabanını biraz düşük performansla gerçekleştirir. En iyi performans için istemci uygulaması ve Redis için Azure Cache örneği aynı konumda olmalıdır.

Bir sonraki bölümde, önbellek kullanmanın iyileştirilmiş performansını görmek için tüm kaynakları Azure'a dağıtacaksınız.

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

  1. Uygulamayı çalıştırmak için Ctrl+F5'e basın.

    App running local

  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ılırken kullanması için SQL Veritabanı'de yeni bir veritabanı sağlayacaksınız.

  1. Azure portalında, Azure portalının sol üst köşesindeki Kaynak oluştur'u seçin.

  2. Yeni sayfasında Veritabanları> SQL Veritabanı'nı seçin.

  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ı kullan'ı seçin ve önbelleğinizi ve App Service'i yerleştirdiğiniz kaynak grubunu kullanın.
    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'u seçin ve aşağıdaki bilgileri sağlayın 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.
    Location 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'u seçerek yeni veritabanı ve sunucuyu oluşturun.

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

    Show connection strings

  7. Azure portalında App Service'inize gidin ve Uygulama Ayarlar'ı seçin, ardından Bağlan ion 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ı dizesi aşağıdaki yer tutucuları değiştirip Kaydet'i seçtiğinizden emin olun:

    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ı Uygulama Ayarı olarak eklediğinizde, kullanıcı adınız ve parolanız kodunuz içinde yer almaz. 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. Visual Studio'da ContosoTeamStats projesini sağ seçin ve Yayımla'yı seçin.

    Publish

  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.

    Cache added

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

    Eylem Tanım
    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 Temizleme Önbellekten ekip istatistiklerini temizleyin.
    Önbellekten Liste Önbellekten ekip istatistiklerini alın. Önbellekte bir eksiklik varsa, veritabanından istatistikleri yükleyin ve bir dahaki sefere önbelleğe kaydedin.
    Önbellekten Sıralanmış Küme Bir sıralanmış küme kullanarak önbellekten en iyi istatistiklerini alın. Önbellek eksikse, veritabanındaki istatistikleri yükleyin ve sıralanmış bir küme kullanarak önbelleğe kaydedin.
    Önbellekteki En İyi 5 Ekip Bir sıralanmış küme kullanarak önbellekten en iyi 5 ekibi alın. Önbellek eksikse, veritabanındaki istatistikleri yükleyin ve sıralanmış bir küme kullanarak önbelleğe kaydedin.
    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 denemeleri yapın. 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ını tamamladığınızda maliyet ve kaynak tasarrufu sağlamak için Azure kaynaklarını silebilirsiniz. Tüm kaynaklarınız aynı kaynak grubunda yer almalıdı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, soldaki her kaynağı tek tek silebilirsiniz.

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

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

  3. Kaynak grubunuzun sağındaki ... öğesini ve ardından Kaynak grubunu sil'i seçin.

    Delete

  4. Kaynak grubunun silinmesini onaylamanız istenir. Onaylamak için kaynak grubunuzun adı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