سلام.
من میخوام به صورت اتومات برای افرادی که تاریخ تولدشون همون روز هست sms بدم.
تو application_start این کار رو انجام دادم اما مشکل اینجاست که اگه کسی وارد برنامه نشه، application_start اجرا نمیشه.
چه راهی هست برای این کار؟
سلام.
من میخوام به صورت اتومات برای افرادی که تاریخ تولدشون همون روز هست sms بدم.
تو application_start این کار رو انجام دادم اما مشکل اینجاست که اگه کسی وارد برنامه نشه، application_start اجرا نمیشه.
چه راهی هست برای این کار؟
سلام
به نظرم میتونی از Quartz استفاده بکنی
برنامه زمان بندی بنویسی برای این کار و در هر روز چک بشه که تولد چه کسانی هست
https://www.quartz-scheduler.net/
رویداد Application_Start جای مناسبی برای این کار نیست، چرا که فقط یک بار، زمانی که برنامه هنوز روی سرور بالا نیومده و برای اولین بار با باز شدن یکی از صفحات اجرا میشه این رویداد اجرا میشه. اگر میخوای الزاما از رویدادهای Global.asax استفاده کنی Session_Start گزینه بهتری محسوب میشه.تو application_start این کار رو انجام دادم اما مشکل اینجاست که اگه کسی وارد برنامه نشه، application_start اجرا نمیشه.
کتابخانه Quartz بیشتر بدرد برنامه های دسکتاپ میخوره تا وب (بخاطر تفاوت اجرای پروسس در وب).به نظرم میتونی از Quartz استفاده بکنی
در وب بهتره از Hangfire استفاده کنی که برای وب بهینه شده (پشت صحنه خودش از Quartz استفاده می کنه، البته با رعایت الزامات Process Management در IIS Worker Process).
با استفاده از Hangfire می تونی یک Task بنویسی که 24 ساعت یک بار مثلا ساعت 10 صبح هر روز اجرا بشه، و با یک کوئری اونهایی رو که امروز تولدشون هست رو بدست بیاره و بهشون SMS یا ایمیل بزنه.
هاست های اشتراکی یه idleTime دارن که اگر درخواستی به سمتشون ارسال نشه نرم افزار یا سایت رو Stop میکنن و بعد از اینکه اولین درخواست به سمتشون ارسال بشه مجددا برنامه از رویداد Application_Start شروع به کار میکنهبا استفاده از Hangfire می تونی یک Task بنویسی که 24 ساعت یک بار مثلا ساعت 10 صبح هر روز اجرا بشه، و با یک کوئری اونهایی رو که امروز تولدشون هست رو بدست بیاره و بهشون SMS یا ایمیل بزنه.
سوال: آیا اگه از Hangfire استفاده کنیم، زمانی که برنامه Stop باشه مثلا ساعت 10 بشه خود Hangfire اجرا میشه؟ یا اینکه حتما نیاز داره برنامه در حال اجرا باشه؟
همه Thread های فرعی (مثل اونهایی که توسط Hangfire ایجاد می شوند) توسط Thread اصلی برنامه ASP.NET شما ایجاد می شوند، بنابراین اگر Thread اصلی برنامه شما به هر دلیل از جمله تنظیمات IdleTime در سرور، Recycle شوند، تمام Thread های فرعی نیز به همراه آن متوقف خواهند شد. در مقاله ای در سایت سازنده پکیج Hangfire موضوع همیشه تحت اجرا نگه داشتن برنامه های ASP.NET بررسی شده است، اما استفاده از آن تکنیک نیازمند داشتن دسترسی Admin به سرور مربوطه جهت انجام تنظیمات لازم، یا درخواست فعال کردن قابلیت AutoStart از ارائه دهنده سرویس میزبانی خواهد بود.سوال: آیا اگه از Hangfire استفاده کنیم، زمانی که برنامه Stop باشه مثلا ساعت 10 بشه خود Hangfire اجرا میشه؟ یا اینکه حتما نیاز داره برنامه در حال اجرا باشه؟
اما همه چیز هم نا امید کننده نیست. اگر مشکل اجرا بودن/کردن برنامه به هر ترتیب حل شود با توجه به اینکه Hangfire امکان Persist کردن وضعیت تسک ها را در یک دیتابیس یا انواع دیگر Storage ها را دارد، پس از اجرای مجدد برنامه تسک هایی که در Hangfire تعریف شده بودند Resume خواهند شد.
پاسخ دقیق شما در پست شماره 3 همین تاپیک دادم: رویداد Session_Startجناب کرامتی الزامی بر استفاده از رویدادهای Global.asax ندارم. به نظر شما بهترین جا برای این کار کجاست؟