65.9K
CodeProject 正在变化。 阅读更多。
Home

.NET WebScheduler,用于通过HTTP和FTP计划下载网站和文件

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.36/5 (8投票s)

2005年2月4日

2分钟阅读

viewsIcon

72344

downloadIcon

1731

一篇介绍 ScheduledTask 类的文章,用于编写 WebScheduler 应用程序,例如 Windows 服务。

引言

是否曾想过创建一个每周发送提醒电子邮件的 Web 应用程序?或者清理一个远程的 imagesarticles 文件夹?或者每晚或每周备份某个 FTP 文件夹?本文档介绍了 David van Leerdam 编写的 ScheduledTask 类,该类可用于(例如)Windows 服务中,您可以运行该服务来为您完成这些任务。

背景

当您托管自己的应用程序时,为您的 Web 服务器安排事件并不是一个真正的挑战。但是,当您的(例如,ASP.NET 或 PHP)应用程序由第三方托管时,问题就出现了,该第三方不允许运行自制的计时器、调度程序、Windows 服务等。一个可能的解决方案是在远程机器上运行(Web)调度程序,例如,在家或办公室的始终在线的机器上。这对于通过 FTP 远程创建网站备份也很有用。

使用代码

该解决方案包括两部分

  1. 一个应用程序,一个 Windows 服务(或其他),它引用 WebScheduler 程序集(请参阅下载)。
  2. WebScheduler 程序集,其中包含 ScheduledTask 类。

对于第 1 部分,我假设您将创建一个 Windows 服务(请参阅下载以获取示例代码)。我的 Windows 服务包含的所有代码是

Protected Overrides Sub OnStart(ByVal args() As String)
    Try
        sites = ScheduledTask.GetAll()
        For i As Integer = 0 To sites.Count - 1
            Dim st As ScheduledTask = sites(i)
            st.Start()
        Next
    Catch ex As Exception
        EventLog.WriteEntry("WebScheduler", _
          "An exception occurred. " & ex.ToString())
        Return
    End Try
End Sub

Protected Overrides Sub OnStop()
    Try
        For i As Integer = 0 To sites.Count - 1
            Dim st As ScheduledTask = sites(i)
            st.Cancel()
        Next
    Catch ex As Exception
        EventLog.WriteEntry("WebScheduler", _
          "An exception occurred. " & ex.ToString())
        Return
    End Try
End Sub

GetAll() 方法的结果是一个 ArrayList,其中包含在配置文件中定义的所有任务。

任务是使用配置文件定义的(目前硬编码为引用 c:\WebScheduler.config)。此示例包含一个任务定义,用于每天凌晨 0:45 创建 mydomain.nl 的备份。

<?xml version="1.0" encoding="utf-8" ?>
<config>
    <tasks>
     <task id="ftp.mydomain.nl"
        url="ftp://ftp.mydomain.nl/"
        scheduledFor="everyDay"
        startTime="00:45:00"
        saveTo="c:\backup\websites\mydomain.nl\"
        recursive="true">
            <credentials
            username="davidl"
            password="p4ssw0rd" />
     </task>
    </tasks>
</config>

请注意,任何配置的文件夹路径(即不是文件)都需要以“\"结尾。这既适用于本地路径,也适用于远程路径。

关注点

需要进行一些更改才能使此组件更可靠

  • 在执行任务时更新配置文件会发生什么情况有待研究。
  • 当请求或完整任务失败时,应进行进一步尝试。

欢迎所有建议、错误报告、代码更新、重构等。请在本页底部给我留言,以便我可以更新这篇文章。

使用应用程序

我将保留一个列表,其中列出使用此组件或其部分的应用程序。请给我留言,以便我可以列出您的应用程序!

  • 我自己的 SchedulingService 应用程序,请参阅下载。

历史

  • 2005 年 10 月 19 日:使用代码的 0.2 版更新了这篇文章。一些主要更改包括一个更好的 FTP 组件(edtFTP.NET 的 1.2.2 版)、配置格式调整和错误修复。在性能和重构方面进行了细微调整。
  • 2005 年 2 月 1 日:发布了该文章,附带代码的 0.1 版。
© . All rights reserved.