1

我在visual studio web express中有web应用程序,在sql server express中有db。我想在每天下午 5:00 执行插入 100 条记录。web 应用程序是在 asp.net MVC 和 vb.net 中开发的。并使用 IIS 7.5 部署在服务器机器上。我应该遵循什么逻辑?

4

2 回答 2

1

对我来说,我正在使用这种方法,直到现在它都很好:)

我已经枚举了要执行的任务以及任务重新启动的时间,这次以秒为单位,如下所示:

public enum ScheduledTasks
{
    CleanGameRequests = 120,
    AnotherTask = 30,
}

然后我开始我的所有任务,Application_Start以确保在我的应用程序运行时任务将执行

    protected void Application_Start()
    {
        ...............
        // Add the tasks on Application starts
        AddTask(ScheduledTasks.CleanGameRequests);
        AddTask(ScheduledTasks.AnotherTask);
    }

好的,现在这是诀窍:)

在 AddTask 方法中,我只是将新的空项添加到缓存中,并根据任务时间为其设置 AbsoluteExpiration 并为此任务调用合适的方法。

实际上我无法很清楚地解释这个想法,但这里是代码:

    private static CacheItemRemovedCallback _onCacheRemove;
    private void AddTask(ScheduledTasks task)
    {
        // Add my `CacheItemRemoved` method to be called on cache removed
        _onCacheRemove = new CacheItemRemovedCallback(CacheItemRemoved);
        // Add new key to the cache with the name of this task 
        // and Expiration time acccordin to the task
        HttpRuntime.Cache.Insert(task.ToString(), (int)task, null,
            DateTime.Now.AddSeconds((int)task), Cache.NoSlidingExpiration,
            CacheItemPriority.NotRemovable, _onCacheRemove);
    }

然后我要做的就是为方法中的每个任务选择合适的CacheItemRemoved方法:

    public void CacheItemRemoved(string key, object time, CacheItemRemovedReason r)
    {
        //Get Task enum object
        var task = (ScheduledTasks)Enum.Parse(typeof(ScheduledTasks), key);
        // Select the suitable method to depending on the Task Enum object
        switch (task)
        {
            case ScheduledTasks.CleanGameRequests:
                GameRequest.CleanUp();
                break;
            case ScheduledTasks.AnotherTask:
                Service.AnotherTask();
                break;
        }
        // Don't forget to re-add the task to the cache to do it again and again
        AddTask(task);
    }

您的情况剩下的最后一件事是检查时间是否是下午 5:00,我建议您将此检查放在您的服务类中。

希望这对你有帮助:)

于 2012-06-06T10:16:14.877 回答
0

由于您使用的是Sql server express edition,因此您无法在 sql 端创建计划作业。但是您可以尝试其他选项,例如。

  1. 石英网

  2. 服务代理方法

  3. Windows 服务(如果您的托管服务提供商允许)

于 2012-06-06T09:23:21.363 回答