PDA

View Full Version : سوال: اجرای یک متد در هر پنج دقیقه



mehran63
چهارشنبه 22 شهریور 1391, 11:55 صبح
سلام
یک کلاس با اسم Abzar وجود دارد میخواهم متدی که با اسم ADD() در این کلاس وجود دارد در هر پنج دقیقه یک بار اجرا شود.
توجه داشته باشید که در Page-Load نباید باشد.
و این برنامه برای یک وب سایت است

alirat
چهارشنبه 22 شهریور 1391, 12:12 عصر
<asp:Timer ID="Timer1" OnTick="Timer1_Tick" runat="server" Interval="300000" />

<asp:UpdatePanel ID="StockPricePanel" runat="server" UpdateMode="Always">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
</Triggers>

از این به بعد با توجه به قوانین وراثت و class که ساختی کد زیر رو تغییر بده ...

protected void Timer1_Tick(object sender, EventArgs e)
{
abzar a=new abzar;
a.Add();
}

mehran63
چهارشنبه 22 شهریور 1391, 17:09 عصر
دوست عزیز ممنون
این روش رو اجرا و تست گرفتم
مسئله ای که وجود دارد این است که
1- متد تا زمانی فراخوانی میشود که صفحه در حال load باشد. یعنی اگر صفحه را از روی مرورگر ببندم، دیگر این متد در یک بازه زمانی فراخوانی نمیشود. در حالی که asp.net در حالت اجرا قرار دارد و آن را Stop نکرده ام. آن چیزی که من میخواهم این است که متد Add() در طول شبانه روز به طور خودکار اجرا شود و کاری به کاربر نداشته باشد که صفحه را باز کند یا نکند
2- تا آنجایی که من میدانم Interval بر اساس میلی ثانیه است. در حالی که وقتی این پارامتر را روی 1000 تنظیم میکنم باید در بازه زمانی 1 ثانیه اجرا شود ولی در 1 دقیقه اجرا میشود و وقتی روی 5000 تنظیم میکنم بعد از 1:30 اجرا میشود.

mehran63
پنج شنبه 23 شهریور 1391, 10:54 صبح
سلام
کسی راه حل نداره

alirat
پنج شنبه 23 شهریور 1391, 11:22 صبح
1-شما نیاز به webservice داری نه یه صفحه aspx ...
2- 1000ms = 1s

mehran63
پنج شنبه 23 شهریور 1391, 11:36 صبح
میشه توضیح بیشتری بدید (یعنی چی شما نیاز به webservice داری نه یه صفحه aspx)

alirat
جمعه 24 شهریور 1391, 23:05 عصر
یعنی aspx تا توسط کاربر باز نشه هیچ کنترلی روش اجرا نمی شه ... ولی شما می خوایی حتی در شبانه روز کاربری مراجعه نکرد بازهم اون عملیات اجرا بشه ...
http://www.codeproject.com/Articles/4379/Introduction-to-NET-Web-Services

mdt414
جمعه 24 شهریور 1391, 23:19 عصر
بهترین روش برای این کار ایجاد یک صفحه هست که هر 5 دقیقه یکبار توسط سیستم اجرا بشه و کار مورد نظر رو براتون انجام بده. که این کار هم به سادگی هرچه تمام تر از طریق ایجاد یک Schedule Task در سرور یا پنل قابل انجام هست.

mehran63
شنبه 25 شهریور 1391, 11:43 صبح
یعنی aspx تا توسط کاربر باز نشه هیچ کنترلی روش اجرا نمی شه ... ولی شما می خوایی حتی در شبانه روز کاربری مراجعه نکرد بازهم اون عملیات اجرا بشه ...
http://www.codeproject.com/Articles/4379/Introduction-to-NET-Web-Services

این متن خیلی برام سنگینه اگه خودتون راه نمایی کنید یا یک منبع فارسی بدید ممنون میشم

mehran63
شنبه 25 شهریور 1391, 11:47 صبح
بهترین روش برای این کار ایجاد یک صفحه هست که هر 5 دقیقه یکبار توسط سیستم اجرا بشه و کار مورد نظر رو براتون انجام بده. که این کار هم به سادگی هرچه تمام تر از طریق ایجاد یک Schedule Task در سرور یا پنل قابل انجام هست.

یعنی منظور شما اینه که من کاری رو که باید تو هر 5 دقیقه باید انجام بشه ببرم تو یه فرم جدا بعد اون رو با Schedule Task فراخوانی کنم؟
اینجوری سایت سنگین نمیشه؟
اینجوری امکان نداره موقعی که کاربر داره تو یه صفحه ای کار میکنه یهو این صفحه بیاد بالا؟

mdt414
شنبه 25 شهریور 1391, 11:56 صبح
1- این حرف زمانی درست است که سرور شما اختصاصی باشد. سنگین شدن سایت بستگی به Query که شما توی اون صفحه استفاده می کنید داره. اگر کوئری معمول و ساده ای باشد، تاثیری روی سرورتون نخواهد داشت . همونطور که کوئری های مختلفی هر لحظه بارها روس سایت شما اجرا میشن.

2- Schedule Task فقط روی سرور اجرا میشه و جایی نمایش داده نمیشه.

mehran63
شنبه 25 شهریور 1391, 12:15 عصر
تا حالا سایتی رو سرور نگذاشتم
میشه بگید چه جوری این کار رو انجام بدم
در ضمن باید طوری تنظیم بشه که هر 5 دقیقه این متد اجرا بشه

mdt414
شنبه 25 شهریور 1391, 12:22 عصر
نیازی به سرور نیست. اگر از پنل استفاده می کنید. یک قسمتی باید توی پنلتون باشه به نام Schedule Tasks که میتونید اونجا به راحتی تنظیمات رو انجام بدید.
اگر بگید از چه پنلی استفاده می کنید می تونم بیشتر کمکتون کنم.

mehran63
شنبه 25 شهریور 1391, 12:28 عصر
منظورتون از پنل رو متوجه نمیشم، پنل رو مگه خوده هاست نمیده؟
من هنوز رو هاست نذاشتم. وب سایتم یکی دو هفته کار میبره

mdt414
شنبه 25 شهریور 1391, 12:34 عصر
بله . پنل رو هاست میده. ولی هر هاستی یک نوع پنل داره ...مثلاً Parallel یا WebsitePanel . بسته به نوع پنلی که در اختیار شما قرار میگیره گزینه فعال سازی فرق میکنه.
اگر میخوای توی حالت Development کارایی رو چک کنی میتونی از طریق Schedule Task ویندوز این کار رو انجام بدی. یک shortcut از لینکی که باید اجرا بشه ایجاد کن و اون رو به Schedule Task بده تا هر 5 دقیقه اجرا کنه.

sanay_esh
شنبه 25 شهریور 1391, 15:13 عصر
با سلام خدمت شما
شما میتوانید از کتابخانه quartz استفاده کنید
بهترین راه حل برای اجرای زمانبندی شده یک کار در وب میباشد
این هم یک راهنمایی برای استفاده از آن (http://www.dotnettips.info/Post/997/%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C-%D9%88%D8%B8%D8%A7%DB%8C%D9%81-%D8%B2%D9%85%D8%A7%D9%86-%D8%A8%D9%86%D8%AF%DB%8C-%D8%B4%D8%AF%D9%87-%D8%A8%D8%A7-quartz-net-%D9%82%D8%B3%D9%85%D8%AA-%D8%A7%D9%88%D9%84)

mehran63
سه شنبه 11 مهر 1391, 19:31 عصر
چطور از وب سرویس برای این کار استفاده کنم