Alıştırma - ASP.NET web uygulamasında oturum durumu bilgilerini depolama

Tamamlandı

ASP.NET web uygulamaları için birçok oturum durumu sağlayıcısı kullanılabilir. Azure App Service altında çalışan bir web uygulamasında Redis için Azure Cache sağlayıcısını kullanmak, çok fazla sayıda eşzamanlı oturumu desteklemek için gereken ölçeklenebilirlik ve performansı sunabilir. Özellikle de aynı oturuma gelen isteklerin web uygulamasının farklı örneklerine yönlendirildiği durumlarda bu geçerlidir.

Bu alıştırmada Redis için Azure Cache hizmetinin bir örneğini oluşturacaksınız. Örnek web uygulaması için oturum sağlayıcısını bu önbelleği kullanacak şekilde yapılandıracaksınız. Ardından uygulamanın oturum durumu bilgilerini depolamak için önbelleği kullandığını doğrulayacaksınız.

Redis için Azure Cache örneği oluşturma

  1. Sağ taraftaki Azure Cloud Shell penceresinde aşağıdaki komutu çalıştırarak, oluşturulacak Redis için Azure Cache örneğinin adını içeren PowerShell değişkenini tanımlayın:

    $rediscachename = (-join($useralias, "-workshop-cache"))
    
  2. Redis için Azure Cache örneğini oluşturun. Bu komutun tamamlanması 15 dakika kadar sürebilir:

    az redis create `
        --location $location `
        --name $rediscachename `
        --resource-group $resourcegroupname `
        --sku Basic `
        --vm-size c0
    
  3. Önbelleğin sağlama durumunu denetlemek için aşağıdaki komutu çalıştırın. Başarılı iletisini görüntüleyene kadar bu komutu 30 saniyede bir yineleyin:

    (Get-AzRedisCache `
        -ResourceGroupName $resourcegroupname `
        -Name $rediscachename).ProvisioningState
    
  4. Önbelleğin birincil erişim anahtarını alın ve daha sonra kullanmak üzere kaydedin:

    $rediskey = (Get-AzRedisCacheKey `
        -Name $rediscachename `
        -ResourceGroup $resourcegroupname).PrimaryKey
    

Web uygulamasında oturum sağlayıcısını yapılandırma

  1. eShopLegacyWebForms çözümünü düzenlemek için Visual Studio'ya dönün.

  2. Çözüm Gezgini penceresinde eShopLegacyWebForms projesine sağ tıklayıp NuGet Paketlerini Yönet'i seçin.

    Screenshot of the shortcut menu for the eShopLegacyWebForms project in the Solution Explorer window with Manage NuGet Packages selected.

  3. NuGet Paket Yöneticisi penceresinde Gözat’ı seçin. Ara kutusuna Microsoft.Web.RedisSessionStateProvider girin. Microsoft.Web.RedisSessionStateProvider paketini seçin ve Yükle'yi seçin.

    Screenshot of the NuGet Package Manager window installing the Microsoft.Web.RedisSessionStateProvider package.

  4. Değişiklikleri Önizle penceresi görüntülenirse Tamam’ı seçin.

    Screenshot of the Preview Changes window with OK selected.

  5. Lisans Kabulü penceresinde Kabul Ediyorum’u seçin.

    Screenshot of the License Acceptance window with I Accept selected.

  6. Çözüm Gezgini penceresinde web.config dosyasını seçin.

  7. Web.config dosyasında sessionState bölümünü bulun. Şunun gibi görünür:

    <sessionState mode="Custom" customProvider="MySessionStateStore">
      <providers>
        <!-- For more details check https://github.com/Azure/aspnet-redis-providers/wiki -->
        <!-- Either use 'connectionString' OR 'settingsClassName' and 'settingsMethodName' OR use 'host','port','accessKey','ssl','connectionTimeoutInMilliseconds' and 'operationTimeoutInMilliseconds'. -->
        <!-- 'throwOnError','retryTimeoutInMilliseconds','databaseId' and 'applicationName' can be used with both options. -->
        <!--
          <add name="MySessionStateStore" 
            host = "127.0.0.1" [String]
            port = "" [number]
            accessKey = "" [String]
            ssl = "false" [true|false]
            throwOnError = "true" [true|false]
            retryTimeoutInMilliseconds = "5000" [number]
            databaseId = "0" [number]
            applicationName = "" [String]
            connectionTimeoutInMilliseconds = "5000" [number]
            operationTimeoutInMilliseconds = "1000" [number]
            connectionString = "<Valid StackExchange.Redis connection string>" [String]
            settingsClassName = "<Assembly qualified class name that contains settings method specified below. Which basically return 'connectionString' value>" [String]
            settingsMethodName = "<Settings method should be defined in settingsClass. It should be public, static, does not take any parameters and should have a return type of 'String', which is basically 'connectionString' value.>" [String]
            loggingClassName = "<Assembly qualified class name that contains logging method specified below>" [String]
            loggingMethodName = "<Logging method should be defined in loggingClass. It should be public, static, does not take any parameters and should have a return type of System.IO.TextWriter.>" [String]
            redisSerializerType = "<Assembly qualified class name that implements Microsoft.Web.Redis.ISerializer>" [String]
          />
        --> 
        <add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider" host="" accessKey="" ssl="true" />
      </providers>
    </sessionState>
    
  8. Aşağıdaki kodda gösterildiği gibi açıklama satırı yapılmış içeriği kaldırın ve MySessionStateStore girdisini ekleyin. youralias değerini $useralias PowerShell değişkeninin değeriyle değiştirin<.> birincil anahtarı> $rediskey PowerShell değişkeninin değeriyle değiştirin<.

    <sessionState mode="Custom" customProvider="MySessionStateStore">
      <providers>
        <add name="MySessionStateStore" 
             type="Microsoft.Web.Redis.RedisSessionStateProvider" 
             host="<youralias>-workshop-cache.redis.cache.windows.net" 
             accessKey="<primarykey>"
             ssl="true" />
      </providers>
    </sessionState>
    
  9. system.web bölümünün başındaki <<sessionState mode="InProc" /> öğesini bulun ve açıklama satırı yapın:>

    ...
    <system.web>
      <compilation debug="true" targetFramework="4.7.2" />
      <httpRuntime targetFramework="4.6.1" requestValidationMode="2.0" />
      <!--sessionState mode="InProc" /-->
      ...
    </system.web>
    

Web uygulamasını Azure’a dağıtma

  1. Çözüm Gezgini penceresinde Modeller klasörünü genişletin, Altyapı klasörünü genişletin ve ardından dbo.catalog_brand_hilo.Sequence.sql dosyasını seçin.

    Screenshot of the Solution Explorer window with the dbo.catalog_brand_hilo.Sequence.sql file selected.

  2. SQL dosyasında, dosyanın başındaki USE deyimini açıklama satırı yapın:

    -- USE [Microsoft.eShopOnContainers.Services.CatalogDb]
    /****** Object:  Sequence [dbo].[catalog_brand_hilo]    Script Date: 16/08/2017 11:21:49 ******/
    CREATE SEQUENCE [dbo].[catalog_brand_hilo] 
      AS [bigint]
      START WITH 1
      INCREMENT BY 10
      MINVALUE -9223372036854775808
      MAXVALUE 9223372036854775807
    CACHE 
    
  3. dbo.catalog_hilo.Sequence.sql dosyası ve dbo.catalog_type_hilo.Sequence.sql dosyası için 2. adımı yineleyin. Tüm dosyaları kaydedin.

    Not

    Bu dosyalardaki betikler, veritabanına veriler sağlandığında çalıştırılır. Bu sağlama işlemi, uygulama yeni veritabanıyla ilk kez çalıştırıldığında otomatik olarak gerçekleşir. Açıklama satırı yaptığınız deyimler yalnızca uygulamayı yerel olarak çalıştırdığınızda gereklidir. Uygulama Azure SQL Server veritabanı kullanılarak çalıştırıldığında, kullanılacak veritabanı bağlantı dizesinin içinde belirtilir.

  4. Şu anda Visual Studio’da Azure hesabınızda oturum açmamış durumdaysanız, araç çubuğunun sağ üst kısmındaki Oturum aç’ı seçin. Yönergeleri izleyin ve oturum açın.

    Screenshot of the Visual Studio toolbar with Sign in selected.

  5. Çözüm Gezgini penceresinde eShopLegacyWebForms projesine sağ tıklayıp Yayımla'yı seçin.

    Screenshot of the Solution Explorer window with the Publish command on the shortcut menu for the eShopLegacyWebForms project selected.

  6. Daha önce web uygulamasını dağıtmadıysanız ve Azure SQL Veritabanı sunucusu bağlantısını yapılandırmadıysanız aşağıdaki alt adımları tamamlayın. Aksi takdirde 7. adıma geçin.

    1. Azure PowerShell penceresine geri dönün. Aşağıdaki komutu çalıştırarak, bilgisayarınızın kurulum ünitesinde oluşturduğunuz Azure SQL Veritabanı sunucusuna erişmesini sağlayın. YourIPAddress değerini bilgisayarınızın genel IP adresiyle değiştirin.

      New-AzSqlServerFirewallRule -ResourceGroupName $resourcegroupname -ServerName $servername -FirewallRuleName "AllowDesktop" -StartIpAddress YourIPAddress -EndIpAddress YourIPAddress
      

      Not

      Cloud Shell çalıştıran konağın IP adresini değil bilgisayarınızın IP adresini belirttiğinizden emin olun.

    2. Visual Studio'da Yayımlama hedefi seçin penceresine dönün ve Azure Uygulaması Hizmet'i>seçin Varolan>Profil Oluştur'u seçin.

      Screenshot of the Pick a publish target window, preparing to create a new profile for publishing the web app to Azure App Service.

    3. App Service penceresinde Azure aboneliğinizi seçin. Görünüm seçeneğini Kaynak türü olarak ayarlayın. Web Uygulaması’nı genişletin, kurulum ünitesinde oluşturduğunuz Azure web uygulamasını seçin ve Tamam’ı seçin.

      Screenshot of the App Service window with the Azure web app created earlier selected.

    4. Yayımla sayfasında Düzenle’yi seçin.

      Screenshot of the Publish page with Edit selected.

    5. Yayımla iletişim kutusunun Bağlantı sayfasında İleri’yi seçin.

      Screenshot of the Connection page of the Publish dialog box with Next selected.

    6. Ayarlar sayfasında, Uzak bağlantı dizesi metin kutusunun yanındaki üç nokta düğmesini (...) seçin.

      Screenshot of the Settings page of the Publis dialog box with the ellipsis button for the remote connection string selected.

    7. Hedef Bağlan Ion Dizesi iletişim kutusunda, aşağıdaki tabloda yer alan değerleri belirtin ve Tamam'ı seçin.

      Alan Value
      Data source Microsoft SQL Server (SqlClient)
      Sunucu adı $servername PowerShell değişkenindeki değeri belirtin. Sunucu adının sonuna .database.windows.net metnini ekleyin.
      Kimlik Doğrulaması SQL Server Kimlik Doğrulaması
      User name $serveradminname PowerShell değişkenindeki değeri belirtin.
      Parola $serveradminpassword PowerShell değişkenindeki değeri belirtin.
      Parolamı kaydet Seçili.
      Veritabanı adını seçin veya girin eShop

      Screenshot of the Destination Connection String dialog box with the settings required to connect to the eShop database running in Azure SQL Database.

    8. Ayarlar sayfasına geri dönüp Çalışma zamanında bu bağlantı dizesi kullan (hedef web.config'i güncelleştir) seçeneğini belirleyin ve ardından Kaydet'i seçin.

      Screenshot of the Settings page of the Publish dialog box with Save selected.

  7. Yayımla sayfasında Yayımla’yı seçin.

    Screenshot of the Publish page with Publish selected.

  8. Web uygulamasının derlenmesini ve App Service’e dağıtılmasını bekleyin. Dağıtım tamamlandığında web uygulaması başlatılır ve Visual Studio bir web tarayıcısı açar. Web uygulamasının yerel olarak çalışırken olduğu gibi çalıştığını doğrulamak için web sitesine göz atın. Web uygulamasının sayfasını tarayıcıda açık bırakın.

Önbellek etkinliğini görüntüleme

  1. Azure Portal’ında oturum açın.

  2. Portalı göster menü düğmesini ve ardından Tüm kaynaklar'ı seçin.

    Screenshot of the Show portal menu button in the Azure portal with the All resources option selected.

  3. Tüm kaynaklar sayfasında, daha önce oluşturmuş olduğunuz Redis için Azure Cache örneğini seçin. Useralias-workshop-cache> adını <alır.

  4. Önbelleğin Genel Bakış bölmesinde Konsol’u seçin.

    Screenshot of the Overview pane for the cache with Console selected.

  5. Redis Konsolu penceresindeki > istemde İzleyici yazın ve Enter tuşunu seçin.

    Screenshot of the Console window with the Redis monitor active.

  6. Web uygulamasının tarayıcı penceresine dönün ve ürünlerin ayrıntılarına göz atın.

    Not

    Redis monitor komutu, önbelleği kullanan tüm işlemlerin performansını etkilediğinden, web uygulamasının normalden yavaş yanıt verdiğini fark edebilirsiniz. Bu monitor komutunu üretim sisteminde kullanmamalısınız.

  7. Önbelleğin Redis Konsolu penceresine dönün. Ürünlere göz atarken gerçekleşen önbellek etkinliğini görüntüleyen iletilere sahip olmanız gerekir. _Data ve _Internal son eklerine sahip anahtarlar, oturum durumu bilgilerini tanımlar.

    Screenshot of the Console window displaying the activity generated while browsing through the web app.

  8. İzleme etkinliğini durdurmak için Enter tuşunu seçin.