【发布时间】:2011-03-09 12:14:42
【问题描述】:
我有一个 Windows 共享主机,我需要每天运行一些预定的 c# 可执行文件来创建站点地图、发送时事通讯等......
提供商告诉我,出于安全原因,我无法运行可执行文件。 我该怎么办?
供应商建议我购买一个 VPS,但不认为为了运行一些计划任务而花更多的钱是有意义的。
是否存在替代方法?
【问题讨论】:
标签: asp.net asp.net-mvc-2 shared-hosting
我有一个 Windows 共享主机,我需要每天运行一些预定的 c# 可执行文件来创建站点地图、发送时事通讯等......
提供商告诉我,出于安全原因,我无法运行可执行文件。 我该怎么办?
供应商建议我购买一个 VPS,但不认为为了运行一些计划任务而花更多的钱是有意义的。
是否存在替代方法?
【问题讨论】:
标签: asp.net asp.net-mvc-2 shared-hosting
Jeff Atwood has created blog entry on this.
简而言之:
我会先考虑the solution from Andy,它看起来更容易管理。
【讨论】:
您可以在共享主机上使用ATrigger 调度服务简单。 .Net library 也可用于创建计划任务而无需开销。此外,您还有报告面板来列出任务并记录所有可能的错误。
免责声明:我是 ATrigger 团队的一员。这是一个免费软件,我没有任何商业目的。
【讨论】:
在您的共享服务器上的 asp.net 页面中实施您的一天一次的任务。然后在您拥有完全访问权限的机器上设置一个进程,每天在预定时间请求该页面一次。
如果一天一次的处理很耗时,那么您可以在页面创建的线程中进行。这将停止请求超时。
为防止滥用,您可以为页面指定一个晦涩的名称,通过 IP 地址限制访问(如果共享服务器的控制面板允许),和/或要求请求进程进行身份验证。该页面还可以将上次请求时间存储在缓存中,并且仅在自上次请求后经过足够的时间后才进行所需的处理。
【讨论】:
这并不理想,但您可以从基本页面(继承 System.Web.UI.Page 的页面和后续页面继承自该页面)继承所有页面,并且在每个页面加载(在基本页面中)您可以检查将在特定时间范围内运行的任务的数据库表。如果在给定页面加载时,在给定时间选择了要运行的任务,并且与请求的页面匹配(或超过该时间),您可以在那时运行它。
不幸的是,这取决于网站用户在您希望作业运行的时间或附近访问您的网站。此外,另一个缺点是,如果您的作业与页面其余部分的执行同步运行,那么请求页面的用户可能正在等待。
希望这会有所帮助。
【讨论】:
共享主机面板中有计划任务。 http://pasteboard.co/2oBUrVeM.png
您可以触发发送电子邮件的操作方法的 url。
【讨论】: