没有人工交互的Web服务后台进程

时间:2012-11-06 20:54:00

标签: c# web-services

我希望我的网络服务每X小时调用一次清理程序,没有来自任何用户的输入,或任何“启动清理服务”的调用。我知道我可以调用一种方法来启动这项服务,但我根本不需要用户交互。我想发布此服务,它会自动启动,并每隔X小时运行一次清理过程。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您可以在Global.asax.cs文件中设置一个每X小时关闭一次的计时器,或者您也可以创建一个每X小时关闭一次的计划任务,以触发清理服务。

如果项目中没有Global文件,只需在项目中添加一个即可添加一个。要执行此操作,请右键单击项目 - >添加 - >单击“新建项目”,然后在选择“全局应用程序类”中弹出的对话框中,单击“添加”。然后在Application_Start事件中,您可以初始化计时器以执行操作。

public class Global : System.Web.HttpApplication
{
    private static System.Threading.Timer timer;

    protected void Application_Start(object sender, EventArgs e)
    {
        var howLongTillTimerFirstGoesInMilliseconds = 1000;
        var intervalBetweenTimerEventsInMilliseconds = 2000;
        Global.timer = new Timer(
            (s) => SomeFunc(),
            null, // if you need to provide state to the function specify it here
            howLongTillTimerFirstGoesInMilliseconds,
            intervalBetweenTimerEventsInMilliseconds
        );
    }

    private void SomeFunc()
    {
        // reoccurring task code
    }

    protected void Application_End(object sender, EventArgs e)
    {
        if(Global.timer != null)
            Global.timer.Dispose();
    }
}

有关全局文件的详细信息,您可能需要参考MSDN