الحفاظ على الدورة ASP.NET InProC عند إعادة تدوير عملية W3WP (IIS)

StackOverflow https://stackoverflow.com/questions/1448367

سؤال

أفهم أن جميع بيانات جلسة InProC قد ذهبت دائما عند إعادة تدوير عملية مالك W3WP لأنها موجودة فقط في ذاكرة W3WP.

تساءلت على الرغم من أنه إذا كان من الممكن التخزين المؤقت لبيانات الجلسة عند حدوث إعادة التدوير في مكان ما في هذه العملية، ثم أعد جلسة (وإعادة البناء) في الجلسة عندما تأتي احتياطيا. وبهذه الطريقة، سأحصل على سرعة InProC مع موثوقية الخارجية التي يشبه خادم الدولة عند الضرورة. هل هذا ممكن؟

هل كانت مفيدة؟

المحلول

لا، هذا غير ممكن. لا يوجد API إلى "الاحماء" حالة جلسة أو ذاكرة التخزين المؤقت. مثل هذا الحل سيكون غير موثوق به على أي حال. لا يمكنك غارنت أن يكون آخر ما فعله تطبيقك لتصدير حالته الدورة الحالية، لذلك لا يمكنك الاعتماد على البيانات المستوردة لتكون حالية على أي حال.

يمكنك استخدام خادم حالة Out-Proc في نفس مضيف تطبيق الويب الخاص بك. ثم يمكن لتطبيق الويب إعادة تدوير بحرية، والحفاظ على معلومات الحالة سليمة. هذا أسرع بكثير من استخدام SQL Server لإدارة الجلسات، لأنك لا تضطر إلى التعامل مع النفقات العامة ل SQL أو Network Transit إلى جهاز آخر، والطريقة الوحيدة التي أصبحت أسوأ من حالة جلسة العمل في العملية هي أن البيانات يجب أن Marshal عبر حدود العملية، ولكن طالما لم يكن لديك قدر كبير من بيانات الجلسة المتغيرة بسرعة، لا ينبغي أن يكون هذا ملحوظا على الإطلاق.

هناك أيضا بدائل أخرى، مثل رمز مشروع Microsoft باسم "السرعة" أو SWELOUT SOFTWARE's Sessionservererver (من بين أمور أخرى أنا متأكد) أن تقدم آليات التخزين المؤقت الموزعة التي يمكن أن تبقي حالة الجلسة أو ذاكرة التخزين المؤقت متزامنة بين الخوادم في مزرعة الخوادم دون الحاجة إلى اللجوء إلى استخدام SQL Server.

على عكس ما نشره مستخدم آخر، لن أستخدم ViewState لتخزين بيانات الجلسة إذا كان ذلك ممكنا. لأحد، ليست حالة جلسة حقيقية، إذا كان المستخدم يتحرك مرة أخرى أو إلى الأمام، فيمكن أن تضيع. ثانيا، إنه أمر غير آمن إلى حد ما. ثالثا، فإنه يسبب تنفيا صفحة ضخمة إذا تعرضت للإيذاء.

نصائح أخرى

ربما يمكنك تخزين معلومات كافية في ملف تعريف الارتباط (أو في FiewState) حتى تتمكن من إعادة إنشاء جلسة بناء على تلك البيانات في حالة إعادة تدوير عملية العامل.

أو يمكنك إنشاء خادم حكومي خاص بك (مثل خدمة Windows) حيث يمكنك تخزين جزء من جلستك، والوصول إلى هذه الخدمة من تطبيق الويب عبر البريد الإلكتروني أو ما شابه ذلك.

يجب عليك استخدام SQL Server لدولة الجلسة إذا كانت هذه هي نيتك. ما تريده جلسات يمكن أن تتعافى من نهاية كاملة لعالمات المضيف. لا يدعم InProc أو Stateerver أنه بمجرد أن ينخفضوا كل البيانات. يمكنك كتابة طريقة الدولة الخاصة بك، ولكن هذا سيكون خاضعا. فيما يلي اتجاهات إذا كنت تريد أن تفعل ذلك:

http://www.exforsys.com/tutorials/asp.net-2.0/asp.net-2.0-Customizing-Stion-Session-State-mechanism.html.

ما قد ترغب في القيام به لا يستخدم جلسات على الإطلاق، ولكن يعتمد بشكل أكبر على ViewState. إذا كان لديك موقع حركة مرور عالية، فهذا وسيلة جيدة لدفع عبء العمل إلى العملاء.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top