我们要求在ASP.Net应用程序中,应该每天在指定的时间自动调用.Net进程。此过程需要与数据库(SQL Server 2005)交互并每天生成计费。我们正在使用共享主机,因此我们无法创建Windows服务或创建SQL Server作业。如何在没有用户干预的情况下实现这一目标?
答案 0 :(得分:12)
你可以试试the technique described here,在StackOverflow本身使用(或者至少在这里使用过一次)。简而言之:
- 启动时,将项目添加到HttpRuntime.Cache并修复 过期。
- 当缓存项目到期时,请执行您的工作,例如WebRequest或具有的内容 你。
- 使用固定的到期时间将项目重新添加到缓存中。
醇>
要让它在特定时间而不是间隔时间运行,您可以降低间隔,只需修改工作方法以检查时间本身。
正如上文所述的原始文章中的评论所指出的那样,这不是一个完美的解决方案,如果有可用的话,任何人都不应该选择正确的调度技术。有关其他资格,请参阅When Does Asp.Net Remove Expired Cache Items?。
答案 1 :(得分:3)
是的,使用Windows Scheduler。根据配置方式的不同,您可能需要登录才能运行调度程序。
答案 2 :(得分:2)
您始终可以安排任务来运行网络服务..
http://weblogs.asp.net/jgalloway/archive/2005/10/24/428303.aspx
调度程序将使用以下内容运行VBS文件..
Set oServerXML = CreateObject("Msxml2.ServerXMLHTTP")
oServerXML.Open "GET","http://my.hostedservice.com/myService.asmx/myService?aParam=Value
oServerXML.setRequestHeader "Content-Type","application/x-www-form-urlencoded"
oServerXML.Send
Set oServerXML = nothing
答案 3 :(得分:1)
不幸的是,无法完成。
IIS仅响应请求,而SQL Server仅唤醒作业。
您最接近的方法是将您的例程放在一个ASPX页面中,而不是从站点链接而不是一个明显的名称,并通过互联网上其他机器的请求触发它。 / p>
另一台机器可能是Windows,Linux,Mac,无论你有什么,所有这些平台都有调度事件(服务,cron等)的方法,这些事件可以使请求触发服务器上的更新
答案 4 :(得分:1)
通过使用缓存过期来触发任务,有很多方法可以在.Net中运行“服务”。
答案 5 :(得分:0)
您可以使用预定任务,但这可能无法在共享托管环境中使用。
您可以在您的网站上设置网络服务或页面以启动该过程,然后在桌面计算机上安排一个计划任务,每天点击该页面/服务一次以启动该过程。哈基,但它可能会奏效。
答案 6 :(得分:0)
由于.NET无知,我认为可以使用某种基于.NET的调度程序框架(非常类似于Quartz for Java)。
或者你可以简单地关闭一个长时间运行的线程,它花费大部分时间睡觉,每分钟唤醒,检查时间,检查它的“要做的事情”列表,触发需要完成的事情。复杂程度是你想要的,但主要目标是保持主要调度线程“活着”,“不惜一切代价”。
答案 7 :(得分:0)
我现在能想到的是:
创建一个包含的dll 安排你想要的逻辑和制作 确定这个dll安排功能 不会停下来,永远循环, 然后你需要一个页面 服务器此页面将触发此dll 功能。 “你需要打电话 这个页面至少有一次启动了 调度器”。
在另一台机器上创建一个应用程序“保存计划逻辑”,可能是您的家用PC,并使您的PC应用程序通过Web服务或页面调用服务器上的功能