Azure için Redis Cache için ASP.NET Oturum Durumu Sağlayıcısı

Redis için Azure Cache, oturum durumunuzu SQL Server veritabanı yerine Redis için Azure Cache ile bellek içinde depolamak için kullanabileceğiniz bir oturum durumu sağlayıcısı sağlar. Önbelleğe alma oturum durumu sağlayıcısını kullanmak için önce önbelleğinizi yapılandırın ve ardından Redis için Azure Cache Oturum Durumu NuGet paketini kullanarak ASP.NET uygulamanızı önbellek için yapılandırın. ASP.NET Core uygulamaları için ASP.NET Core'da oturum ve durum yönetimi bölümüne bakın.

Bir kullanıcı oturumu için bir tür durum depolamaktan kaçınmak genellikle bir bulut uygulamasında pratik değildir, ancak bazı yaklaşımlar performansı ve ölçeklenebilirliği diğerlerinden daha fazla etkiler. Durum depolamanız gerekiyorsa en iyi çözüm, durum miktarını küçük tutmak ve tanımlama bilgilerinde depolamaktır. Bu uygun değilse, sonraki en iyi çözüm dağıtılmış, bellek içi önbellek için bir sağlayıcıyla ASP.NET oturum durumunu kullanmaktır. Performans ve ölçeklenebilirlik açısından en kötü çözüm, veritabanı destekli oturum durumu sağlayıcısı kullanmaktır. Bu makale, Redis için Azure Cache için ASP.NET Oturum Durumu Sağlayıcısı'nı kullanma konusunda rehberlik sağlar. Diğer oturum durumu seçenekleri hakkında bilgi için bkz . Oturum Durumu seçenekleri ASP.NET.

Önbellekte ASP.NET oturumu durumu depolama

Visual Studio'da Redis için Azure Cache Oturum Durumu NuGet paketini kullanarak bir istemci uygulaması yapılandırmak için Araçlar menüsünden NuGet Paket Yöneticisi Paket Yöneticisi Konsolu'nu seçin.

Package Manager Console penceresinden aşağıdaki komutu çalıştırın.

Install-Package Microsoft.Web.RedisSessionStateProvider

Önemli

Premium katmandan kümeleme özelliğini kullanıyorsanız RedisSessionStateProvider 2.0.1 veya üzerini kullanmanız gerekir; aksi takdirde bir özel durum oluşturulur. 2.0.1 veya üzeri bir sürüme geçmek hataya neden olan bir değişikliktir.

Redis Oturum Durumu Sağlayıcısı NuGet paketinin StackExchange.Redis paketine bağımlılığı vardır. StackExchange.Redis paketi projenizde yoksa yüklenir.

NuGet paketi, gerekli derleme başvurularını indirip ekler ve web.config dosyanıza aşağıdaki bölümü ekler. Bu bölüm, ASP.NET uygulamanızın Redis için Azure Cache Oturum Durumu Sağlayıcısı'nı kullanması için gerekli yapılandırmayı içerir.

<sessionState mode="Custom" customProvider="MySessionStateStore">
  <providers>
    <!-- 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>

Açıklamalı bölüm, her öznitelik için özniteliklerin ve örnek ayarların bir örneğini sağlar.

Microsoft Azure portalında önbelleğinizden sol taraftaki değerlerle öznitelikleri yapılandırın ve diğer değerleri istediğiniz şekilde yapılandırın. Önbellek özelliklerinize erişme yönergeleri için bkz. Redis için Azure Cache ayarlarını yapılandırma.

  • host – önbellek uç noktanızı belirtin.
  • port – TLS ayarlarına bağlı olarak TLS/SSL olmayan bağlantı noktanızı veya TLS/SSL bağlantı noktanızı kullanın.
  • accessKey – önbelleğiniz için birincil veya ikincil anahtarı kullanın.
  • ssl – TLS ile önbellek/istemci iletişimlerinin güvenliğini sağlamak istiyorsanız true; aksi takdirde false. Doğru bağlantı noktasını belirttiğinizden emin olun.
    • TLS olmayan bağlantı noktası, yeni önbellekler için varsayılan olarak devre dışıdır. TLS bağlantı noktasını kullanmak için bu ayar için true değerini belirtin. TLS olmayan bağlantı noktasını etkinleştirme hakkında daha fazla bilgi için Önbellek yapılandırma makalesindeki Erişim Bağlantı Noktaları bölümüne bakın.
  • throwOnError – Hata olduğunda bir özel durumun atılmasını istiyorsanız true veya işlemin sessizce başarısız olmasını istiyorsanız false. Statik Microsoft.Web.Redis.RedisSessionStateProvider.LastException özelliği denetleyerek bir hata olup olmadığını de kontrol edebilirsiniz. Varsayılan değer true'dur.
  • retryTimeoutInMilliseconds – Başarısız olan işlemler, milisaniye cinsinden belirtilen bu aralıkta yeniden denenir. İlk yeniden deneme 20 milisaniye sonra gerçekleşir ve sonra s aralığı sona erene kadar retryTimeoutInMillisecondher saniye yeniden denemeler gerçekleşir. Bu aralık sonrasında işlem son bir kez yeniden denenir. İşlem yine de başarısız olursa, ayara bağlı olarak özel durum çağırana throwOnError geri oluşturulur. Varsayılan değer 0'dır ve bu da yeniden deneme yapılmadığı anlamına gelir.
  • databaseId : Önbellek çıktı verileri için hangi veritabanının kullanılacağını belirtir. Belirtilmezse, varsayılan 0 değeri kullanılır.
  • applicationName – Anahtarlar redis'te olarak {<Application Name>_<Session ID>}_Datadepolanır. Bu adlandırma düzeni, birden çok uygulamanın aynı Redis örneğini paylaşmasını sağlar. Bu parametre isteğe bağlıdır ve sağlamazsanız varsayılan bir değer kullanılır.
  • connectionTimeoutInMilliseconds – Bu ayar StackExchange.Redis istemcisindeki ayarı geçersiz kılmanıza connectTimeout olanak tanır. Belirtilmezse, 5000 varsayılan connectTimeout ayarı kullanılır. Daha fazla bilgi için bkz . StackExchange.Redis yapılandırma modeli.
  • operationTimeoutInMilliseconds – Bu ayar StackExchange.Redis istemcisinde syncTimeout ayarını geçersiz kılmanıza olanak tanır. Belirtilmezse, varsayılan syncTimeout 1000 ayarı kullanılır. Daha fazla bilgi için bkz . StackExchange.Redis yapılandırma modeli.
  • redisSerializerType - Bu ayar, Redis'e gönderilen oturum içeriğinin özel serileştirmesini belirtmenize olanak tanır. Belirtilen türün uygulanması Microsoft.Web.Redis.ISerializer ve genel parametresiz oluşturucu bildirmesi gerekir. Varsayılan olarak System.Runtime.Serialization.Formatters.Binary.BinaryFormatter kullanılır.

Bu özellikler hakkında daha fazla bilgi için Redis için Oturum Durumu Sağlayıcısı ASP.NET duyurusu sayfasında özgün blog gönderisi duyurusunun konusuna bakın.

Web.config'inizdeki standart InProc oturum durumu sağlayıcısı bölümüne açıklama eklemeyi unutmayın.

<!-- <sessionState mode="InProc"
     customProvider="DefaultSessionProvider">
     <providers>
        <add name="DefaultSessionProvider"
              type="System.Web.Providers.DefaultSessionStateProvider,
                    System.Web.Providers, Version=1.0.0.0, Culture=neutral,
                    PublicKeyToken=31bf3856ad364e35"
              connectionStringName="DefaultConnection" />
      </providers>
</sessionState> -->

Bu adımlar gerçekleştirildikten sonra uygulamanız Redis için Azure Cache Oturum Durumu Sağlayıcısı'nı kullanacak şekilde yapılandırılır. Uygulamanızda oturum durumunu kullandığınızda, bir Redis için Azure Cache örneğinde depolanır.

Önemli

Önbellekte depolanan veriler, varsayılan bellek içi ASP.NET Oturum Durumu Sağlayıcısı'nda depolanabilen verilerin aksine serileştirilebilir olmalıdır. Redis için Oturum Durumu Sağlayıcısı kullanıldığında, oturum durumunda depolanan veri türlerinin serileştirilebilir olduğundan emin olun.

Oturum Durumu seçeneklerini ASP.NET

  • Bellek Oturumu Durumu Sağlayıcısı- Bu sağlayıcı Oturum Durumunu bellekte depolar. Bu sağlayıcıyı kullanmanın avantajı basitlik ve hızdır. Ancak, bellek sağlayıcısında kullanıyorsanız Web Uygulamalarınız dağıtılamadığınız için ölçeklendirilemezsiniz.
  • Sql Server Oturum Durumu Sağlayıcısı - Bu sağlayıcı, Oturum Durumunu Sql Server'da depolar. Oturum durumunu kalıcı depolamada depolamak istiyorsanız bu sağlayıcıyı kullanın. Web Uygulamanızı ölçeklendirebilirsiniz, ancak Oturum için Sql Server'ın kullanılması Web Uygulamanız üzerinde bir performans etkisine sahiptir. Bu sağlayıcıyı, performansı geliştirmeye yardımcı olmak için Bellek İçi OLTP yapılandırmasıyla da kullanabilirsiniz.
  • Redis için Azure Cache Oturum Durumu Sağlayıcısı gibi Bellek Oturumu Durumu Sağlayıcısında Dağıtılmış - Bu sağlayıcı size her iki dünyanın da en iyilerini sunar. Web Uygulamanızın basit, hızlı ve ölçeklenebilir bir Oturum Durumu Sağlayıcısı olabilir. Bu sağlayıcı Oturum durumunu bir Önbellekte depoladığından, uygulamanızın geçici ağ hataları gibi Dağıtılmış Bellek Önbelleği ile konuşurken ilişkili tüm özellikleri dikkate alması gerekir. Önbelleği kullanmayla ilgili en iyi yöntemler için bkz. Microsoft Desenleri ve Uygulamaları Azure Bulut Uygulaması Tasarım ve Uygulama Kılavuzu'ndan Önbelleğe Alma yönergeler.

Oturum durumu ve diğer en iyi yöntemler hakkında daha fazla bilgi için bkz . Web Geliştirme En İyi Yöntemleri (Azure ile Gerçek Dünya Bulut Uygulamaları Oluşturma).

Üçüncü taraf oturum durumu sağlayıcıları

Sonraki adımlar

Redis için Azure Cache için ASP.NET Çıktı Önbelleği Sağlayıcısı'na göz atın.