ورود

View Full Version : سوال: اجرای اتوماتیک یک دستور به صورت روزانه در ساعتی خاص



minaalamshahi
جمعه 09 اردیبهشت 1390, 01:28 صبح
سلام
من یه برنامهasp.net دارم که داخل اون احتیاج دارم که یه دستور delete هر روز به صورت اتوماتیک راس ساعت خاصی بعد از چک فیلدی خاص اجرا بشه
از دوستان کی میتونه در این ضمینه من رو راهنمایی کنه.

BookWorm
جمعه 09 اردیبهشت 1390, 03:34 صبح
با سلام دوست عزیز اگر برنامه شما اجرا شده باشه و صفحه وب شما فعال باشه این امکان پذیره و در غیر اینصورت باید یک وب سرویس بنویسید که نمی دانم از آن اطلاعاتی دارید یا خیر ؟ به هر حال اینکار توسط یک کنترل تایمر در آزاکس که در VS2008 به بعد بطور پیش فرض است امکان پذیر است و همچنین میتوان از یک UpdatePanelبرای اینکار استفاده کرد ، شبه کد آن بصورت زیر است

protected sub timer1_tick()
{
ساختن connection وانجام سایر تنظیمات
...
DataAdapter SqlDA = new DataAdapter();
DataTable SqlDT = new DataTable();
SqlCommand Sqlcmd = new SqlCommand();
Sqlcmd.Commandtext="Select Fieldname From TableName ...";
Sqlcmd.ExecuteNonequery();
SqlDA .fill(SqlDT);
if (SqlDT.Row[Index][Index].Tostring() == Value)
{
Sqlcmd.Commandtext="Delete From TableName Where ...";
Sqlcmd.ExecuteNonequery();
}
}

BookWorm
جمعه 09 اردیبهشت 1390, 03:39 صبح
همچنین می توانید از Java برای اینکار استفاده کنید که بنظر بنده خیلی هم بهتر استو نیازی به updatepanel ندارید ولی باید بدونید java client Side هست .

minaalamshahi
جمعه 09 اردیبهشت 1390, 23:02 عصر
ممنون از لطف همیشگیت دوست عزیز.روی کدی که لطف کردی و گذاشتی کار می کنم در صورت لزوم باز هم ازت کمک می گیرم لطف می کنی راهنماییم کنی.

minaalamshahi
جمعه 09 اردیبهشت 1390, 23:58 عصر
تایمر که یهinterval داره که به این زمانی که در اینجا مشخص می کنیم می گیم برای مثال هر 1 ساعت این دستور رو اجرا کن و برو ببین اگر ساعت مثلا 10 شده دستور delete رو اجرا کن،که این زمانگیر به نظر میاد و ممکنه ساعت مثلا 10 کامل نباشه مثلا باشه 10:32:12 ثانیه من نمیتونم تایمر برای هر حالتی پیش بینی کنم.تعیین زمان اجرای دستور در برنامه من به دست کاربر هست که این زمان در پایگاه قرار می گیره.
یا اصلا زمانیکه تایمر اجرا میشه ساعت 10:1 دقیقه باشه که اصلا به ساعت 10 برخورد نکرده و شرطtrue نمیشه.
از جاوا چطور می تونم استفاده کنم؟

raziee
شنبه 10 اردیبهشت 1390, 09:20 صبح
استفاده از Timer به نظر من زیاد صحیح نیست.
در اجرا چندین بار Stop شده بود.
در مورد پیاده سازی Task در ASP.NET جستجو کنید راه های دیگه ای هم هست.

clover
شنبه 10 اردیبهشت 1390, 09:44 صبح
در مورد پیاده سازی Task در ASP.NET جستجو کنید راه های دیگه ای هم هست.
ممنون میشم اگر اطلاعاتی دارید در اختیار دوستان بذارید، من شخصا از یک نرم افزار ساده ویندوزی برای فراخوانی صفحه مورد نظر استفاده می کنم و خود این نرم فزار را با Schedule Tasks در پنل پلسک فراخوانی می کنم. البته روش قابل انعطافی نیست و اجبارا از این روش استفاده می کنم.

alonemm
شنبه 10 اردیبهشت 1390, 10:45 صبح
معمولا در کنترل پنل هاستها گزینه ای به نام Corn Job وجود داره که این عملایات رو برای شما انجام میده.
یعنی شما صفحه مورد نظر و زمان رو بهش میدید و این صفحه در زمان مربوطه اجرا میشه.

aserfg
شنبه 10 اردیبهشت 1390, 11:28 صبح
استفاده از Timer به نظر من زیاد صحیح نیست.
صد در صد درست نیست ! timer در واقع یه لوپ هست ولی اونچه دوستمون می خواد

من یه برنامهasp.net دارم که داخل اون احتیاج دارم که یه دستور delete هر روز به صورت اتوماتیک راس ساعت خاصی بعد از چک فیلدی خاص اجرا بشه
با تاکید بر عبارت راس ساعت خاص
این مفهوم schedule task یا به عبارتی وظیفه زمان بندی شده است که شما می توانید از کتابخانه SalarSoft.WebTaskScheduler.dll (که توسط یکی از دوستان همین سایت فکر کنم آی دیشون salar soft بود ) استفاده کنید ایشون در تاپیکی دمویی هم گذاشته بودند و من قبلا تست کردم و به درستی اجرا شد .
موفق باشید .

L_eskandary
شنبه 10 اردیبهشت 1390, 18:56 عصر
معمولا در کنترل پنل هاستها گزینه ای به نام Corn Job وجود داره که این عملایات رو برای شما انجام میده.

البته اکثرا فقط عنوان دارن و موقع اجرا و استفاده که برسه کاری از پیش نمی برین . لااقل من تو دوتا از شرکت های که هاسینگ ارائه می دن این رو متوجه شدم.
و اما در مورد سوال مطرح شده : من از global.asax برا اینکار استفاده کردم :


private const string ExecuteCacheItemKey = "yourkey";
protected void Application_Start(object sender, EventArgs e)
{

RegisterCacheEntryYourWork();
}
private void RegisterCacheEntryYourWork()
{
// Prevent duplicate key addition
if (null != HttpContext.Current.Cache[ExecuteCacheItemKey]) return;

HttpContext.Current.Cache.Add(ExecuteCacheItemKey, "Test", null, DateTime.MaxValue,
TimeSpan.FromMinutes(1), CacheItemPriority.NotRemovable,
new CacheItemRemovedCallback(CacheItemRemovedCallbackY ourWork));

}

public void CacheItemRemovedCallbackYourWork(
string key,
object value,
CacheItemRemovedReason reason
)
{
Debug.WriteLine("Cache item callback: " + DateTime.Now.ToString());

// Do the service works
// DeleteYourItems();

}
protected void Application_BeginRequest(object sender, EventArgs e)
{
RegisterCacheEntryYourWork
}


البته منم اگه اشتباه نکنم از سایت codeproject این روش رو برداشتم و الان هم که درست کار میکنه و جواب هم گرفتم .
کافیه اون قسمتی که نوشتم DeleteYourItem کدهای مربوط به delete رو بنویسین .
موفق باشین.

minaalamshahi
شنبه 10 اردیبهشت 1390, 19:56 عصر
تاپیکی گفتیداز salar soft رو پیدا نکردم.demo رو خودتون save ندارین؟

minaalamshahi
یک شنبه 11 اردیبهشت 1390, 00:58 صبح
پس چرا اصلا این قسمت اجرا نمیشه
public void CacheItemRemovedCallbackYourWork(string key, object value, CacheItemRemovedReason reason)
{
Debug.WriteLine("Cache item callback: " + DateTime.Now.ToString());

// Do the service works
// DeleteYourItems();
}
و با توجه به دستوارت اون طور که فهمیدم این قسمت اگر اجرا بشه فقط یک بار در مرحله اول اجرا میشه.

raziee
یک شنبه 11 اردیبهشت 1390, 13:28 عصر
ممنون میشم اگر اطلاعاتی دارید در اختیار دوستان بذارید، من شخصا از یک نرم افزار ساده ویندوزی برای فراخوانی صفحه مورد نظر استفاده می کنم و خود این نرم فزار را با Schedule Tasks در پنل پلسک فراخوانی می کنم. البته روش قابل انعطافی نیست و اجبارا از این روش استفاده می کنم.

این لینک (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) رو ببینید

minaalamshahi
پنج شنبه 03 آذر 1390, 15:23 عصر
لطفا در این مورد توضیح بده