C# 无人机交互的Web服务后台进程

C# 无人机交互的Web服务后台进程,c#,web-services,C#,Web Services,我希望我的web服务每X小时调用一次清理例程,没有任何用户的输入,也没有任何“启动清理服务”的调用。我知道我可以调用一个方法来启动这个服务,但我不希望有任何用户交互。我想发布此服务,它会自动启动,并每X小时运行一次清理过程 有什么想法吗?您可以在Global.asax.cs文件中设置一个计时器,该计时器将每X小时启动一次,或者您也可以创建一个计划任务,该任务也将每X小时启动一次,以触发清理服务 如果项目中没有全局文件,只需将一个文件添加到项目中即可。为此,右键单击项目->添加->新建项,然后在弹

我希望我的web服务每X小时调用一次清理例程,没有任何用户的输入,也没有任何“启动清理服务”的调用。我知道我可以调用一个方法来启动这个服务,但我不希望有任何用户交互。我想发布此服务,它会自动启动,并每X小时运行一次清理过程


有什么想法吗?

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

如果项目中没有全局文件,只需将一个文件添加到项目中即可。为此,右键单击项目->添加->新建项,然后在弹出的对话框中选择全局应用程序类并单击添加。然后在
应用程序\u 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();
    }
}

有关全局文件的更多信息,请参考

在ASMX服务或WCF服务中尝试此解决方案?清理过程是在清理web服务本身,还是数据库,还是什么?它必须在web服务内部运行吗?它已发布到IIS 7.0服务器。清理过程是清理服务使用/创建的不再需要的本地文件。把它想象成一个自动回收站清洁器。项目被放入一个不需要的文件夹中,X小时后我想检查这些项目是否“旧”(3天),如果是,则将其删除。可能的重复项我的web服务c#项目中没有Global.aspx.cs。我可以添加它吗?或者我需要做一些特殊的事情吗?@Tizz抱歉,我的文件名有点错误,它应该是
Global.asax.cs
更新了帖子并编辑了答案,包括如何添加,如果它在SD中不存在@JG感谢您解释如何将全局文件放置到位。即使在我再次发布web服务时,似乎也从未调用过应用程序_End。有什么解释吗?@Tizz我看到在Visual Studio中托管网站时未调用Application_End事件,如果使用停止按钮或shift+F5停止网站,则不会调用该事件。如果右键单击托盘中的图标并转到“停止”,则会调用它。至于它是否托管在IIS中,这同样取决于网站是如何停止的,如果强制停止或停止是正常的方式。