ما هي أفضل الممارسات لبدء عملية الصيانة على ASP.NET [مغلق]

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

  •  09-06-2019
  •  | 
  •  

سؤال

نظرًا لتطبيق ASP.NET، أحتاج إلى تشغيل عملية صيانة بشكل منتظم (يوميًا، كل ساعة، وما إلى ذلك).

ما هي أفضل طريقة لتحقيق ذلك دون الاعتماد على عملية خارجية مثل مهمة مجدولة على الخادم (بافتراض أنه لا يمكنني الوصول إلى الخادم - بيئة استضافة مشتركة).

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

المحلول

إليك الطريقة التي يقوم بها StackOverflow:

private static CacheItemRemovedCallback OnCacheRemove = null;

protected void Application_Start(object sender, EventArgs e)
{
    AddTask("DoStuff", 60);
}

private void AddTask(string name, int seconds)
{
    OnCacheRemove = new CacheItemRemovedCallback(CacheItemRemoved);
    HttpRuntime.Cache.Insert(name, seconds, null,
        DateTime.Now.AddSeconds(seconds), Cache.NoSlidingExpiration,
        CacheItemPriority.NotRemovable, OnCacheRemove);
}

public void CacheItemRemoved(string k, object v, CacheItemRemovedReason r)
{
    // do stuff here if it matches our taskname, like WebRequest
    // re-add our task so it recurs
    AddTask(k, Convert.ToInt32(v));
}

تفاصيل: http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/

نصائح أخرى

إحدى الطرق للقيام بذلك، إذا لم تكن بحاجة إلى القيام بذلك في وقت محدد، ولكن تحتاج فقط إلى التنظيف "من حين لآخر"، هي إنشاء وظيفة في Global.asax Session_OnEnd() الخاص بك والتي ستنشئ عشوائيًا الرقم بين 1 و100، وإذا كان الرقم 50، تقوم بتنفيذ مهمة الصيانة.

بالطبع، يمكنك تقليل "100" حتى تتم المهمة بشكل متكرر أكثر.

يوجد أيضًا مقال بعنوان "محاكاة خدمة Windows باستخدام ASP.NET لتشغيل المهام المجدولة" على http://www.codeproject.com/aspnet/ASPNETService.asp يستخدم ذاكرة تخزين مؤقت منتهية الصلاحية لمحاكاة مؤقت.تدعي أنه يمكن تشغيلها على أي موقع مستضاف.

إذا كنت تستخدم الأخير، يرجى قراءة هذا التعليق من منشور حول هذه التقنية:

تحتاج حقًا إلى توخي الحذر من طول المهمة.كل مهمة جديدة هي موضوع جديد للعاملين وهناك عدد محدود من هؤلاء - لأنه "يستعير" موضوع من مجموعة الخيوط المدارة.

بدءًا من الإصدار 3.5 من الإطار ، تمت زيادة الحد الأقصى لعدد الخيوط 10x من 25 إلى 250.ولكن هناك الآن بدء تشغيل لوغاريتمي ، لذا فهي تتغلب على المزيد من المواضيع ، فإنها تحصل على خداع معهم.إذا نفدت الخيوط المتاحة في تجمع الخيوط المدارة - فستذهب أوقات الاستجابة الخاصة بك عبر السقف.

ما تكتبه حقًا هنا هو نظام مراسلة/طابور.

إذا كنت تفعل أشياء مثل تحديث ذاكرة التخزين المؤقت ، فعندئذ ، قم ببدء مهمة جديدة.إذا كنت تفعل شيئًا مثل تنزيل مورد HTTP الثانوي أو نوع من أعمال قاعدة البيانات المكثفة - اكتب خدمة Windows واستخدم قائمة انتظار تتيح لك المزيد من التحكم في مقدار "اللدغة" في كل مرة.

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

على الرغم من أن الطريقة التي يقوم بها StackOverflow بذلك هي بالتأكيد فريدة من نوعها، فقد ترغب في مراقبة ذلك سؤال أيضا، لأنه يتعلق.

هذه عملية خارجية ولا أعرف مدى موثوقيتها ولكن يمكنك إعداد شيء مماثل على جهاز تعرف أنه قيد التشغيل دائمًا www.webcron.org.

ما يفعله في الأساس هو الوصول إلى الصفحة التي تطلبها وفقًا للجدول الزمني الذي تطلبه.

يمكنك بشكل أساسي الحصول على أي شيء يصل إلى الصفحة وفقًا لجدول زمني منتظم من شأنه أن يبدأ مهمة الصيانة الخاصة بك.

ناقش جيف وجويل أيضًا القيام بأشياء مماثلة في بث صوتي حديث عبر طرق أخرى.

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