PDA

View Full Version : سوال: زمانبندی اجرای یک متد و استفاده از تایمر تحت وب



Ishtar_4552
جمعه 01 بهمن 1389, 00:38 صبح
با سلام به همه دوستان
من چطور می تونم یک متد را در زمان های مختلف اجرا کنم،مثلا اینکه به طور اتوماتیک در یک زمان مشخص یک ایمیل یا اس ام اس برای کاربران مختلف ارسال بشه،تا اونجایی که میدونم برای برنامه های تحت ویندوز امکان استفاده از تایمر و ویندوز سرویس ها وجود داره،ولی من میخوام این کار رو تحت وب انجام بدم آیا کسی اطلاعاتی دراین زمینه داره؟:لبخندساده:

prankster
جمعه 01 بهمن 1389, 01:54 صبح
متاسفانه با استفاده از ASP.net به تنهایی نمی توان 100% چنین چیزی را پیاده سازی کرد! برنامه های تحت وب اصطلاحا برنامه های passive هستند، بدین معنی که تنها به درخواست های Http جواب می دهند، هنگامی که شخصی به یک برنامه وب درخواستی را ارسال می کند، در صورتی که برنامه در حالت اجرا نباشد، ابتدا اجرا شده، یک instance از برنامه در web server بارگزاری می شود و سپس به درخواست پاسخ داده می شود. هنگامی که برای مدت زمان خاصی که در config پروژه مشخص شده است، درخواستی به یک برنامه تحت وب داده نشود این برنامه shutdown شده و از حافظه خارج می شود
در بعضی از موارد پیاده سازی Scheduled Task با اجرای برنامه ASP.net و از طریق وقفه Application_Start از کلاس Global.asax انجام می شود در صورتی که برای پیاده سازی یک Scheduled Task برنامه باید در حالت اجرا و در حافظه مقیم باشد، و برنامه های ASP.net چنین چیزی را نمی توانند پشتیبانی کنند به علاوه در صورت restart شدن سرور تا زمان اولین درخواست از سوی کاربران وبسایت برنامه اجرا نخواهد شد!
پیاده سازی Scheduled Task در ASP.net معمولا با استفاده از یک Windows Service قابل اجرا است، این Windows Service در فواصل زمانی مشخصی متد خاصی از یک WebService را در برنامه تحت وب فراخوانی می کند که این متد روتین اجرای عملیات مورد نظر است.
نصب یک Windows Service فقط در صورت دسترسی به سرور امکان پذیر است که متاسفانه در مورد اکثر Hosting ها این عمل ممکن نیست! بعضی از Hosting ها Windows Service خاصی به این منظور دارند و در کنترل پنل Hosting قسمتی تحت عنوان Scheduled Task دارند که می توان با معرفی یک WebService به آن عملیات مورد نظر را در فواصل زمانی خاص انجام داد.

raziee
جمعه 01 بهمن 1389, 11:12 صبح
من این کار رو انجام دادم.
شما در ساده ترین راه میتونید یک Timer در Application_Start بسازید.
این ساده ترین راه هست. اما من بعد از پیاده سازی این روش به مشکلاتی برخورد میکردم. بعضی وقت ها این Timer - Stop میشد.
=-=-
بعد از تحقیق به نتیجه ای رسیدم که در این لینک میتونید مشاهده کنید.
تا امروز که مشکلی در اون سایت نداشتم.
در اون سایت در بازه ی زمانی 40 ثانیه پیامک هایی رو از دیتابیس خونده و ارسال میکنه.
این لینک ها رو هم میتونید مطالعه کنید. اما من از روشی که در لینک بالا گفتم استفاده کردم.

http://www.codeproject.com/KB/aspnet...ebservice.aspx
http://msdn.microsoft.com/en-us/magazine/cc163821.aspx
http://www.beansoftware.com/ASP.NET-...led-Tasks.aspx

نقل قول بالا رو از این پست (http://barnamenevis.org/showthread.php?267229-%D8%A7%D9%86%D8%AC%D8%A7%D9%85-%D8%AE%D9%88%D8%AF%DA%A9%D8%A7%D8%B1-%DA%A9%D8%A7%D8%B1-%D9%87%D8%A7-%D8%AF%D8%B1-%D8%B3%D8%A7%DB%8C%D8%AA-%D8%B1%D9%88%DB%8C-%D8%B3%D8%B1%D9%88%D8%B1-%D8%AF%D8%B1-%D8%B2%D9%85%D8%A7%D9%86-%D8%AE%D8%A7%D8%B5&p=1182369&highlight=#post1182369) گرفتم.
تاپیک مربوطه رو کامل مطالعه کنید.

mohsen92
جمعه 01 بهمن 1389, 16:44 عصر
شما میتونین از تایمر Ajax استفاده کنید.
اگه از VS 2008 استفاده می کنید. ت. ToolBox می تونی ببینیش. کار باهاش ساده س.

javad_r_85
جمعه 01 بهمن 1389, 18:34 عصر
با استفاده از DateTime و Timespan می تونی اینکارو بکنی به جای تایمر