سؤال

لدينا موقع على شبكة الإنترنت حيث نحتاج إلى جدولة لتلقي الإخطارات (البريد الإلكتروني) في وقت محدد. على سبيل المثال تم تذكير شخص بتذكير في الساعة 5 مساء لحضور الاجتماع في الساعة 4:45 مساء، وسوف تتلقى البريد الإلكتروني في الساعة 4:45 مساء حول نفسه.

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

هل هناك أي شيء في ASP.NET الذي يمكن أن يساعد في هذا السيناريو؟

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

المحلول

وماذا عن هذا: محاكاة خدمة Windows باستخدام ASP.NET لتشغيل الوظائف المجدولة.

في نقطة واحدة كانت هذه التقنية تستخدم في تجاوز كومة, على الرغم من أنني لا أعتقد أنه أكثر من ذلك.

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

نصائح أخرى

تحتاج إلى إجراء وظيفة على الخادم، لكن ليس لديك طريقة جيدة لتشغيلها من ASP.NET؟

ماذا عن إنشاء صفحة ويب تبدأ في عملك، ولديك تشغيل مؤقت في مكان آخر (أي على كمبيوتر آخر) يطلب ذلك الصفحة. (فقط ضرب الصفحة لتشغيلك وظائف)

كان لدي نفس المشكلة كما انتهى بي الأمر ببرمجة خدمة تستخدم Quartz.net: http://quartznet.sourceforge.net/ والاتصال بنفس قاعدة البيانات كموقع على الويب.

مع ASP.NET أنت غير مضمون لأن تطبيقك على قيد الحياة في جميع الأوقات، وبالتالي تطبيقات الويب كعملية مضيفة لحل الجدولة غير ممكن من المنظمة البحرية الدولية.

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

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

إذا لم يكن لديك حقا أي سيطرة على الخادم (المعنى، فلا يمكنك استخدام مهمة SQL أو مهمة مجدولة أو تثبيت خادم Windows) ثم يمكنك استخدام A system.threading.timer. أن تقوم بالتهيئة في Global.asax (على سبيل المثال، عند بدء تشغيل التطبيق) الذي يستدعي طريقة معينة في تطبيقك كل X. هذه الطريقة ستحصل بعد ذلك على قاعدة البيانات الخاصة بك ومعرفة ما يجب إرسال الإشعارات.

هذا ليس في الحقيقة نهج مرغوب فيه، حيث أن الموقت غير مضمون لاستدعاء دائما بقدر ما أعرف، لأنه، مثل Peter يقول، فإن تطبيق الويب الخاص بك غير مضمون لتكون حية في جميع الأوقات.

ومع ذلك، اعتمادا على الاحتياجات الخاصة بك، لا يزال بإمكانه وجود نهج "جيد بما يكفي" إذا لم يكن لديك أي خيارات أخرى.

ومع ذلك، إذا كنت عالقا تماما وليس لديك خيار سوى استضافة ذلك في WebApp الخاص بك،

يمكنك أن تنظر إلى إنشاء System.Timers.Timer مثيل ملف Global.asax.cs الخاص بك. الأسلاك حتى حدث انقضت كما تفعل عادة، ومنحها بعض الكود الذي يفعل شيئا على غرار

protected void myTimer_Elapsed(object sender, EventArgs e)
{
    if(System.DateTime.Now Falls in Some Configured Time-Window)
        //Do Stuff
}

ولكن كما أشار شخص ما، فإنه غير مضمون لأن IIS قد يتم إعادة تعيين خلال تلك الفترة، وفي هذه الحالة سوف تفوتها.

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

باستخدام هذه الطريقة، عليك أن تتأكد من عدم تفريغ التطبيق لك. لذلك تحتاج إلى نوع من الحفاظ على قيد الحياة. أود أن أقترح إعداد أداة مراقبة ويب سيسحب باستمرار صفحة (ASPX) للحفاظ على التطبيق على قيد الحياة. هؤلاء الرجال مجانيون http://mon.itor.us/

لا أؤمن بك، لأن كود المصدر لل Quartz.net (1.0 و 1.0.1) لا يترجم تحت Visual Studio.net 2005 و 2008. الطريقة الوحيدة للحصول على Quartz.net هي استخدام حزمة Spring.net كاملة ، والتي تجمع بشكل جيد تحت VS.NET 2005 و 2008

ما لم تتمكن من مشاركة بعض النصائح، وكيفية ترجمة واستخدام Quartz.dll في مشروع ASP.NET! (صفحة الويب من Quartz.net و Readme.txt لا تقدم أي معلومات عن مصدر Coude Compilation) يتم الترحيب بكل نصيحة!

واجهت مشكلة في البداية أيضا، ولكن هذا بسبب وجود asemblyfo.cs اللازمة في المجلد الأصل. أيضا، ستحتاج إلى إضافة dlls الثلاثة المضمنة.

لا أؤمن بك، لأن كود المصدر لل Quartz.net (1.0 و 1.0.1) لا يترجم تحت Visual Studio.net 2005 و 2008. الطريقة الوحيدة للحصول على Quartz.net هي استخدام حزمة Spring.net كاملة ، والتي تجمع بشكل جيد تحت VS.NET 2005 و 2008

ما لم تتمكن من مشاركة بعض النصائح، وكيفية ترجمة واستخدام Quartz.dll في مشروع ASP.NET! (صفحة الويب من Quartz.net و Readme.txt لا تقدم أي معلومات عن مصدر Coude Compilation) يتم الترحيب بكل نصيحة!

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