0

私のアプリケーションでは、データは.configファイル(XML形式)に保存されています。ユーザーは、メールを希望する日付を設定できます(メールによるリマインダーなど)。したがって、目標日にユーザーにメールを送信するために毎日実行されるスケジューラーが必要です。データベースの相互作用がないので、どのようにしてスケジューラーを実行することができますか?

私はこの仕事について完全に空白です。誰か助けてもらえますか?

前もって感謝します。

4

3 に答える 3

3

タスクを実行する時間になったら、定期的にバックグラウンド チェックでアプリケーションを実行することができます。Windows サービスは、私がこの種のタスクに頻繁に使用するものです。または、Windows のスケジュールされたタスクをプログラムで作成して、アプリを実行することもできます。

于 2008-12-23T10:44:34.043 に答える
2

任意の exe を実行する Windows スケジューラ サービスを使用するだけです。代わりに、プロセスが非常に複雑な場合は、独自のサービスを作成できます。

于 2008-12-23T10:45:53.247 に答える
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>
于 2008-12-23T16:56:31.813 に答える