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






3.36/5 (8投票s)
2005年2月4日
2分钟阅读

72344

1731
一篇介绍 ScheduledTask 类的文章,用于编写 WebScheduler 应用程序,例如 Windows 服务。
引言
是否曾想过创建一个每周发送提醒电子邮件的 Web 应用程序?或者清理一个远程的 images 或 articles 文件夹?或者每晚或每周备份某个 FTP 文件夹?本文档介绍了 David van Leerdam 编写的 ScheduledTask
类,该类可用于(例如)Windows 服务中,您可以运行该服务来为您完成这些任务。
背景
当您托管自己的应用程序时,为您的 Web 服务器安排事件并不是一个真正的挑战。但是,当您的(例如,ASP.NET 或 PHP)应用程序由第三方托管时,问题就出现了,该第三方不允许运行自制的计时器、调度程序、Windows 服务等。一个可能的解决方案是在远程机器上运行(Web)调度程序,例如,在家或办公室的始终在线的机器上。这对于通过 FTP 远程创建网站备份也很有用。
使用代码
该解决方案包括两部分
- 一个应用程序,一个 Windows 服务(或其他),它引用 WebScheduler 程序集(请参阅下载)。
- 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 版。