2008-12-23 50 views
0

在我的应用程序中,数据存储在.config文件中(以XML格式)。用户可以设置他想要邮件的日期(如通过邮件提醒)。所以应该有一个日程安排程序,每天执行一次,以便将目标日期的邮件发送给用户。由于没有数据库交互,所以如何运行调度程序?如何对存储在.config文件中的数据执行schedular?

我对这个任务完全空白。谁能帮我?

在此先感谢。

回答

3

如果是时候执行任务,您可以定期在后台运行应用程序。 Windows服务是我经常用于这类任务的东西。或者,您可以编程方式创建一个Windows计划任务来运行您的应用程序。

+0

打我一拳! – cgreeno 2008-12-23 10:46:54

2

只需使用Windows调度程序服务即可运行任何exe,或者如果过程非常复杂,您可以创建自己的服务。

1

您可以使用最适合您的窗口调度程序或服务,但除此之外,您还可以通过Web应用程序在其中运行计划任务。为此,您必须使用goabal.asax文件。每60分钟后将运行一次。 global.asax代码如下::

<code> 
<%@ Application Language="C#" %> 

<script runat="server"> 

    private const string DeliveryPageUrl = "http://put any test url of your application"; 

    private const string DummyCacheItemKey = "Any hard coded value"; // you can put any name here DummyCacheItemKey = "gigigagagugu"; 

    void Application_Start(object sender, EventArgs e) 
    { 
     // Code that runs on application startup 
     RegisterCacheEntry(); 
    } 

    protected void Application_BeginRequest(Object sender, EventArgs e) 
    { 
     // If the dummy page is hit, then it means we want to add another item 
     // in cache 
     if (HttpContext.Current.Request.Url.ToString() == DeliveryPageUrl) 
     { 
      // Add the item in cache and when succesful, do the work. 
      RegisterCacheEntry(); 
     } 
    } 
    /// <summary> 
    /// Register a cache entry which expires in 60 minute and gives us a callback. 
    /// </summary> 
    /// <returns></returns> 
    private void RegisterCacheEntry() 
    { 
     // Prevent duplicate key addition 
     if (null != HttpContext.Current.Cache[DummyCacheItemKey]) return; 

     HttpContext.Current.Cache.Add(DummyCacheItemKey, "Test", null, DateTime.MaxValue, 
             TimeSpan.FromMinutes(60), CacheItemPriority.NotRemovable, 
             new CacheItemRemovedCallback(CacheItemRemovedCallback)); 
    } 
    /// <summary> 
    /// Callback method which gets invoked whenever the cache entry expires. 
    /// We can do our "service" works here. 
    /// </summary> 
    /// <param name="key"></param> 
    /// <param name="value"></param> 
    /// <param name="reason"></param> 
    public void CacheItemRemovedCallback(string key, object value, CacheItemRemovedReason reason) 
    { 
     // We need to register another cache item which will expire again in one 
     // minute. However, as this callback occurs without any HttpContext, we do not 
     // have access to HttpContext and thus cannot access the Cache object. The 
     // only way we can access HttpContext is when a request is being processed which 
     // means a webpage is hit. So, we need to simulate a web page hit and then 
     // add the cache item. 
     HitPage(); 
    } 

    /// <summary> 
    /// Hits a local webpage in order to add another expiring item in cache 
    /// </summary> 
    private void HitPage() 
    { 
     System.Net.WebClient client = new System.Net.WebClient(); 
     client.DownloadData(DeliveryPageUrl); 
    } 
    void Application_End(object sender, EventArgs e) 
    { 
     // Code that runs on application shutdown 

    } 

    void Application_Error(object sender, EventArgs e) 
    { 
     // Code that runs when an unhandled error occurs 

    } 

    void Session_Start(object sender, EventArgs e) 
    { 
     // Code that runs when a new session is started 

    } 

    void Session_End(object sender, EventArgs e) 
    { 
     // Code that runs when a session ends. 
     // Note: The Session_End event is raised only when the sessionstate mode 
     // is set to InProc in the Web.config file. If session mode is set to StateServer 
     // or SQLServer, the event is not raised. 

    } 

</script> 

    </code> 
+0

请在代码中加入一些格式,以便我们可以更好地阅读它 – 2008-12-23 18:16:21

相关问题