نوشته شده توسط
roomezonline
سلام دوستان
من یک وب سرویس دارم که تعداد لینکهای موجود را بدست میاره و تحت یک string برمیگردونه
مثلا >>>>> تعداد لینک = 12
حالا میخوام هر یک ساعت این تعداد لینک رو واسم ایمیل کنه
من نه در ارسال ایمیل مشکل دارم نه بدست اوردن تعداد لینک
سوال : نحوه نوشتن یک تایمر برای WEb Service که هر یک ساعت اطلاعات رو دریافت و برای من ایمیل کند.
لطفا دوستانی که در این زمینه کار کردن کمک کنند
با تشکر
در مورد Task جستجو کنید.
قبلا در این باره بحث شده چندین بار.
اما به طور خلاصه :
باید بوسیله ی مبحث Cache و Expire شدن اون این کار رو انجام بدی.
به کد های پایین هم نگاه کن.(یادم نمیاد از کدوم سایت برداشته بودم که لینک بدم)
public class ScheduledTaskManager
{
#region Singleton
static readonly ScheduledTaskManager instance = new ScheduledTaskManager();
static ScheduledTaskManager()
{
}
ScheduledTaskManager()
{
}
public static ScheduledTaskManager Instance
{
get
{
return instance;
}
}
#endregion
#region Private Fields
private static CacheItemRemovedCallback OnCacheRemove = null;
#endregion
#region Public Methods
public void AddTask(IScheduledTask task)
{
OnCacheRemove = new CacheItemRemovedCallback(CacheItemRemoved);
HttpRuntime.Cache.Insert(task.Name, task, null,
DateTime.Now.Add(task.Expiration), Cache.NoSlidingExpiration,
CacheItemPriority.NotRemovable, OnCacheRemove);
}
#endregion
#region Private Methods
private void CacheItemRemoved(string k, object v, CacheItemRemovedReason r)
{
var task = v as IScheduledTask;
if (task == null) return;
task.Run();
if (!task.IsOnce)
AddTask((IScheduledTask)v);
}
#endregion
}
public interface IScheduledTask
{
TimeSpan Expiration { get; set; }
Boolean IsOnce { get; set; }
String Name { get; set; }
void Run();
}
public class MyTask : IScheduledTask
{
#region IScheduledTask Members
public TimeSpan Expiration
{
get;
set;
}
public string Name
{
get;
set;
}
public void Run()
{
Debug.WriteLine("Running !");
// Compose a string that consists of three lines.
string lines = string.Format("Task Name : {0}, runnig on {1}\r\n", this.Name, DateTime.Now);
// Write the string to a file.
System.IO.StreamWriter file = new System.IO.StreamWriter("e:\\temp_task.txt", true);
file.WriteLine(lines);
file.Close();
}
public bool IsOnce
{
get;
set;
}
#endregion
}
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
var task = new MyTask { Name = "MyTask", Expiration = new TimeSpan(0, 0, 10) };
ScheduledTaskManager.Instance.AddTask(task);
//var task2 = new MyTask { Name = "MyTask2", Expiration = new TimeSpan(0, 2, 10) };
//ScheduledTaskManager.Instance.AddTask(task2);
//var task3 = new MyTask { Name = "MyTask3", Expiration = new TimeSpan(0, 3, 10) };
//ScheduledTaskManager.Instance.AddTask(task3);
}