موفر حالة جلسة عمل ASP.NET لـ Azure Cache لـ Redis⁦⁩

يوفر Azure Cache for Redis موفر حالة جلسة العمل الذي يمكنك استخدامه لتخزين حالة الجلسة في الذاكرة باستخدام Azure Cache for Redis بدلاً من قاعدة بيانات SQL Server. لاستخدام موفر حالة جلسة التخزين المؤقت، قم أولا بتكوين ذاكرة التخزين المؤقت، ثم قم بتكوين تطبيق ASP.NET لذاكرة التخزين المؤقت باستخدام حزمة Azure Cache for Redis Session State NuGet. بالنسبة لتطبيقات ASP.NET Core، اقرأ إدارة الجلسة والحالة في ASP.NET Core.

غالبًا ما لا يكون من العملي في تطبيق السحابة تجنب تخزين شكل من أشكال الحالة لجلسة عمل المستخدم، ولكن بعض الأساليب تؤثر على الأداء وقابلية التوسع أكثر من غيرها. إذا كان عليك تخزين الحالة، فإن أفضل حل هو الحفاظ على كمية الحالة صغيرة وتخزينها في ملفات تعريف الارتباط. إذا لم يكن ذلك ممكنًا، فإن الحل الأفضل التالي هو استخدام حالة جلسة ASP.NET مع موفر لذاكرة التخزين المؤقت الموزعة في الذاكرة. أسوأ حل من وجهة نظر الأداء وقابلية التوسع هو استخدام موفر حالة جلسة عمل مدعوم بقاعدة بيانات. توفر هذه المقالة إرشادات حول استخدام موفر حالة جلسة العمل ASP.NET لـ Azure Cache for Redis. للحصول على معلومات حول خيارات حالة جلسة العمل الأخرى، راجع ASP.NET Session State options.

تخزين حالة جلسة ASP.NET في ذاكرة التخزين المؤقت

لتكوين تطبيق العميل في Visual Studio باستخدام Azure Cache لحزمة Redis Session State NuGet، حدد NuGet Package Manager ، وحدة تحكم مدير الحزم من الأدوات قائمة.

قم بتشغيل الأمر التالي من النافذة Package Manager Console.

Install-Package Microsoft.Web.RedisSessionStateProvider

هام

إذا كنت تستخدم ميزة التجميع من المستوى المتميز، فيجب عليك استخدام RedisSessionStateProvider 2.0.1 أو أعلى أو يتم طرح استثناء. يعد الانتقال إلى 2.0.1 أو أعلى تغييرًا فاصلاً.

تحتوي حزمة NuGet لموفر حالة جلسة عمل Redis على تبعية على حزمة StackExchange.Redis. إذا لم تكن حزمة StackExchange.Redis موجودة في مشروعك، فقد تم تثبيتها.

تقوم حزمة NuGet بتنزيل وإضافة مراجع التجميع المطلوبة وإضافة القسم التالي إلى ملف web.config الخاص بك. يحتوي هذا القسم على التكوين المطلوب لتطبيق ASP.NET لاستخدام لموفر حالة جلسة Azure Cache for Redis.

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

يوفر القسم الذي تم التعليق عليه مثالاً على السمات وإعدادات العينة لكل سمة.

قم بتكوين السمات مع القيم الموجودة على اليسار من ذاكرة التخزين المؤقت في مدخل Microsoft Azure، وتكوين القيم الأخرى حسب الرغبة. للحصول على تعليمات حول الوصول إلى خصائص المخبأ الخاصة بك، راجع ضبط مخزن Azure لإعدادات Redis .

  • المضيف - حدد نقطة نهاية ذاكرة التخزين المؤقت.
  • المنفذ - استخدم إما منفذ TLS/SSL الخاص بك أو منفذ TLS/SSL الخاص بك، اعتمادًا على إعدادات TLS.
  • accessKey – استخدم المفتاح الأساسي أو الثانوي لذاكرة التخزين المؤقت.
  • ssl – صحيح إذا كنت تريد تأمين اتصالات ذاكرة التخزين المؤقت/العميل مع TLS؛ خلاف ذلك خطأ. تأكد من تحديد المنفذ الصحيح.
  • throwOnError – صحيح إذا كنت تريد طرح استثناء عند حدوث فشل، أو خطأ إذا كنت تريد فشل العملية بصمت. يمكنك التحقق من حدوث فشل عن طريق التحقق من الخاصية الثابتة Microsoft.Web.Redis.RedisSessionStateProvider.LastException. الافتراضي هو صواب.
  • retryTimeoutInMilliseconds – تتم إعادة محاولة العمليات التي تفشل أثناء هذا الفاصل الزمني، المحدد بالمللي ثانية. تحدث إعادة المحاولة الأولى بعد 20 مللي ثانية، ثم تحدث إعادة المحاولة كل ثانية حتى retryTimeoutInMillisecondتنتهي صلاحية الفاصل الزمني. مباشرة بعد هذا الفاصل الزمني، تتم إعادة محاولة العملية مرة أخيرة واحدة. إذا استمرت العملية في الفشل، يتم طرح الاستثناء مرة أخرى إلى المتصل، اعتمادًا على الإعداد throwOnError. القيمة الافتراضية هي 0، ما يعني عدم إعادة المحاولة.
  • databaseId – يحدد قاعدة البيانات التي يجب استخدامها لبيانات إخراج ذاكرة التخزين المؤقت. إذا لم يتم تحديدها، يتم استخدام القيمة الافتراضية 0.
  • applicationName – يتم تخزين المفاتيح في redis كـ {<Application Name>_<Session ID>}_Data. يتيح نظام التسمية هذا لتطبيقات متعددة مشاركة نفس مثيل Redis. هذه المعلمة اختيارية وإذا لم توفر لها قيمة افتراضية يتم استخدامها.
  • connectionTimeoutInMilliseconds – يسمح لك هذا الإعداد بتجاوز الإعداد connectTimeout في عميل StackExchange.Redis. إذا لم يتم تحديده، يتم استخدام إعداد connectTimeout الافتراضي 5000. لمزيد من المعلومات، راجع نموذج تكوين StackExchange.Redis.
  • operationTimeoutInMilliseconds – يسمح لك هذا الإعداد بتجاوز إعداد syncTimeout في عميل StackExchange.Redis. إذا لم يتم تحديده، يتم استخدام إعداد syncTimeout الافتراضي 1000. لمزيد من المعلومات، راجع نموذج تكوين StackExchange.Redis.
  • redisSerializerType - يسمح لك هذا الإعداد بتحديد تسلسل مخصص لمحتوى جلسة العمل الذي يتم إرساله إلى Redis. يجب تنفيذ Microsoft.Web.Redis.ISerializer للنوع المحدد ويجب أن يعلن عن الدالة الإنشائية العامة دون معلمات. بشكل افتراضي، يتم استخدام System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.

لمزيد من المعلومات حول هذه الخصائص، راجع إعلان منشور المدونة الأصلي في الإعلان عن ASP.NET موفر حالة جلسة العمل لـ Redis.

لا تنس التعليق على قسم موفر حالة جلسة العمل القياسية InProc في web.config.

<!-- <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> -->

بمجرد تنفيذ هذه الخطوات، يتم تكوين التطبيق الخاص بك لاستخدام موفر حالة جلسة Azure Cache for Redis. عند استخدام حالة جلسة العمل في التطبيق الخاص بك، يتم تخزينها في مثيل Azure Cache for Redis.

هام

يجب أن تكون البيانات المخزنة في ذاكرة التخزين المؤقت قابلة للتسلسل، على عكس البيانات التي يمكن تخزينها في موفر حالة جلسة العمل الافتراضي في الذاكرة ASP.NET. عند استخدام موفر حالة جلسة العمل لـ Redis، تأكد من أن أنواع البيانات التي يتم تخزينها في حالة جلسة العمل قابلة للتسلسل.

خيارات حالة جلسة العمل ASP.NET

  • في موفر حالة جلسة الذاكرة - يخزن هذا الموفر حالة جلسة العمل في الذاكرة. تتمثل فائدة استخدام هذا الموفر في البساطة والسرعة. ومع ذلك، لا يمكنك توسيع نطاق تطبيقات الويب الخاصة بك إذا كنت تستخدم في موفر الذاكرة نظرًا لأنه لم يتم توزيعه.
  • موفر حالة جلسة عمل Sql Server - يخزن هذا الموفر حالة الجلسة في Sql Server. استخدم هذا الموفر إذا كنت تريد تخزين حالة جلسة العمل في التخزين المستمر. يمكنك توسيع نطاق تطبيق الويب الخاص بك ولكن استخدام Sql Server for Session له تأثير أداء على تطبيق الويب الخاص بك. يمكنك أيضًا استخدام هذا الموفر مع تكوين OLTP في الذاكرة للمساعدة في تحسين الأداء.
  • موزع في موفر حالة جلسة الذاكرة مثل موفر حالة جلسة Azure Cache for Redis - يمنحك هذا الموفر أفضل ما في العالمين. يمكن أن يحتوي تطبيق الويب الخاص بك على موفر حالة جلسة عمل بسيط وسريع وقابل للتطوير. نظرًا لأن هذا الموفر يخزن حالة جلسة العمل في ذاكرة التخزين المؤقت، فإنه يجب أن يأخذ تطبيقك في الاعتبار جميع الخصائص المقترنة عند التحدث إلى ذاكرة التخزين المؤقت الموزعة في الذاكرة، مثل حالات فشل الشبكة العابرة. للحصول على أفضل الممارسات حول استخدام ذاكرة التخزين المؤقت، راجع إرشادات التخزين المؤقت من أنماط Microsoft وممارسات Azure Cloud Application Design وإرشادات التنفيذ.

لمزيد من المعلومات حول حالة جلسة العمل وأفضل الممارسات الأخرى، راجع Web Development Best Practices (Building Real-World Cloud Apps with Azure).

موفرو حالة جلسة عمل الجهات الخارجية

الخطوات التالية

تفقّد ASP.NET Output Cache Provider for Azure Cache for Redis.