كما نعلم جميعًا، ليس من السهل تنفيذ تطبيق يعمل على مدار 24 ساعة طوال أيام الأسبوع. لقد استمر أحد مشاريعي ذات مرة لأكثر من 20 ساعة تحت ضغط عنيف وما زال يموت ببطولة. لحسن الحظ، يوفر لنا ASP.NET وIIS بعض التسهيلات السهلة التي تتيح لنا إنشاء تطبيقات .Net فائقة الاستقرار بسهولة. ومع ذلك، ما هو غير سارة بعض الشيء هو أن أساليب التكوين في أنظمة Windows 2000 (الإصدارات أقل من IIS6.0) وأنظمة Windows 2003 (IIS6.0) مختلفة.
دعونا نتحدث عن نظام Windows 2000 أولاً. أولئك الذين هم على دراية بـ ASP.NET يجب أن يعرفوا جميعًا ملف Machine.config المخزن في الدليل %WindowPath%Microsoft.NetFramework%.NetVersion%CONFIG. استخدم أي محرر نصوص (المحرر الأكثر شيوعًا بالطبع هو "المفكرة") لفتح الملف والعثور على القسم <processModel...>. يتحكم ASP.NET في عملية خدمة ASP.NET (aspnet_wp.exe أو w3wp.ext) استنادًا إلى الإعدادات الموجودة في هذا القسم. يتم تشغيل رمز تطبيق ASP.NET الذي كتبناه في مساحة العملية هذه. إذا كنت تستخدم Framework 1.1، فسوف ترى أكثر من n من الخصائص في هذا القسم، ونحن مهتمون بالخصائص الثلاثة التالية، متبوعة بعلامة التساوي وهي قيمها الافتراضية:
timeout = "Infinite"
idleTimeout = "Infinite"
MemoryLimit = "60"
لا يمكنك رؤيتها ضمن Framework 2.0، ولكن يمكنك إضافتها يدويًا.
اسمحوا لي أن أترجم معنى هذه السمات الثلاث. بعد التشغيل المستمر للوقت المحدد بواسطة المهلة، أعد تشغيل عملية خدمة ASP.NET. القيمة الافتراضية للمهلة هي اللانهاية. يمكنك إعادة تعيينها بتنسيق "HH:MM:SS "، على سبيل المثال، timeout=24:00:00 يعني إعادة التشغيل بعد 24 ساعة؛ إذا لم يتمكن أحد من الوصول خلال الوقت المحدد بواسطة idleTimeout، فأعد تشغيل عملية خدمة ASP.NET. القيمة الافتراضية لـ idleTimeout هي أيضًا لا نهائية، وطريقة الإعداد كما هو مذكور أعلاه؛ إذا تجاوزت النسبة المئوية للذاكرة المستخدمة من قبل عملية خدمة ASP.NET لإجمالي ذاكرة النظام المقدار المحدد بواسطة MemoryLimit، فسيتم إعادة تشغيل عملية خدمة ASP.NET.
افهم أنه من خلال التعاون بين هذه السمات الثلاث، يمكن إعادة تشغيل عملية الخدمة دون معرفة ذلك، حتى يتمكن تطبيقنا من الاستمرار في التشغيل. عندما أقول هذا، ربما اكتشف القراء المتأنيون المشكلة عند إعادة تشغيل عملية الخدمة، ستفقد حتماً جلسة العميل وستتم مقاطعة عملية المستخدم. كيف يمكننا أن نحقق مقولة "الله لا يعلم والأشباح لا تعلم"؟
هذه المشكلة موجودة بالفعل، ولكن يمكن التقليل من تأثيرها أو حتى إزالتها تمامًا من خلال الإجراءات التالية:
أولاً، يمكننا ضبط idleTimeout على قيمة معقولة، عادةً ما أقوم بتعيينه على 1.5-1.5 من إعداد مهلة الجلسة 3 مرات. اضبط المهلة على الحد الأعلى الذي يمكن أن يستمر فيه البرنامج، وعادةً ما أضبطه على 24 ساعة. سيؤدي هذا إلى إعادة تشغيل عملية الخدمة عندما تكون في وضع الخمول، نظرًا لعدم وجود جلسة في هذا الوقت، فمن المستحيل مقاطعة عملية المستخدم. يعد هذا الإعداد فعالاً للغاية في بيئة مكتبية للمؤسسات الصغيرة والمتوسطة الحجم، لأنه لا يمكن الوصول إليه بعد ساعات العمل.
وبطبيعة الحال، فإن الطريقة المذكورة أعلاه لها قيود كبيرة ولا يمكن أن تعمل إلا في حالات محددة. إذا استمر شخص ما في الوصول أو إعادة التشغيل عندما تتجاوز الذاكرة الحد الأقصى، فستظل عملية المستخدم معرضة للتداخل. الحل النهائي هو حفظ حالة الجلسة في عملية منفصلة. وهذا ممكن أيضًا على ASP.Net من خلال تكوين بسيط.
المصدر: غرفة تسجيل المدونة