سؤال

هل هناك طريقة لتعيين قيمة مختلفة لمهلة بدء تشغيل الخدمة لكل خدمة؟يمكنني تغييره باستخدام مفتاح التسجيل ServicesPipeTimeout، ولكنه مخصص لكل جهاز (http://support.microsoft.com/kb/824344).

في هذه اللحظة، الشيء الوحيد الذي فكرت فيه هو القيام بكل إجراءات بدء التشغيل التي تستغرق وقتًا طويلاً في موضوع مختلف.

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

المحلول

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

نصائح أخرى

وأنا أتفق مع رومولو على الانتهاء لبدء الخدمة الخاص بك في أقرب وقت ممكن. ومع ذلك، إذا كنت في حاجة إلى الوقت وكنت تستخدم الإطار الصافي 2.0 أو في وقت لاحق، قد تنظر ServiceBase.RequestAdditionalTime طريقة ().

http://msdn.microsoft.com /en-us/library/system.serviceprocess.servicebase.requestadditionaltime.aspx

protected override void OnStart()
{
    this.RequestAdditionalTime(10000);
    // do your stuff
}

وببساطة تفعل أشياء timeintensive في موضوع آخر

   protected override void OnStart(string[] args)
    {
        var task = new Task(() =>
        {
            // Do stuff
        });
        base.OnStart(args);
        task.Start();
    }

كان عليّ أيضًا التعامل مع خدمة قد تستغرق بضع ثوانٍ/دقائق للحصول على بداية جيدة.عند بدء تشغيل الخدمة، تحاول الاتصال بخادم SQL.ومع ذلك، عند إعادة تشغيل الخادم بالكامل، بدأت الخدمة قبل SQL Server.(أعرف تبعية الخدمة ولكنها لا تنطبق على وضعي لسبب معين....).لقد حاولت القيام بمحاولة متكررة 10 مرات للاتصال بـ SQL Server، لكن Windows كان يقتل خدمتي قبل المحاولة الثانية، بسبب انتهاء المهلة.

بلدي الحل :لقد قمت بإضافة مؤقت في "onStart()" لخدمتي.بعد ذلك، كانت طريقة الخدمة "onTick()" تحاول الاتصال بخادم SQL 10 مرات (مع انتظار 30 مرة).لا مزيد من المهلة عند بدء التشغيل.

لذلك في الأساس،

  • تبدأ خدمتي خلال 5 ثواني.
  • تم إطلاق مؤقت بعد 10 ثوانٍ من بدء الخدمة.
  • يحاول المؤقت 10 مرات [انتظار 30 ثانية في كل مرة] للاتصال بخادم SQL.
  • إذا نجحت، فسيقوم المؤقت بتعطيل نفسه، وإذا لم يكن الأمر كذلك (بعد 10 محاولات)، فسوف أقوم بإيقاف الخدمة.

لاحظ الطريقة الأكثر أناقة لحل المشكلة ولكن ربما يساعد جزء من الحل الذي أقدمه أي شخص في نفس الموقف مثلي،

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