使用webservice每天仅动态执行一次方法

时间:2011-03-26 04:05:05

标签: c# .net web-services .net-3.5

我想创建一个webservice,它将在一天中的某个特定时间处理我的数据库中的数据。

此时间将存储在数据库中。

它应该每天只运行一次。

我该怎么做?

3 个答案:

答案 0 :(得分:3)

创建一个Windows Service,让它在Windows启动时启动,设置timer,创建一个event来处理计时器的elapsed event,你就可以了去。

答案 1 :(得分:1)

Web服务不适合此任务。它们旨在响应请求而运行。您需要运行代码以响应一天中的时间。

我同意创建Windows服务的建议。如果您不想这样做,请创建一个简单的控制台应用程序,然后通过计划任务运行它。

答案 2 :(得分:0)

是否绝对有必要将时间存储在数据库中?通常,它们使用外部调度程序服务(任务计划程序或SQL代理)。并通过运行带有服务URL的命令行HTTP客户端来调用该服务。例如,Curl可以工作,或者您可以使用XMLHTTP调用快速编写JavaScript并使用cscript.exe调用它。

此外,如果数据处理可以完全实现为存储过程,则不需要Web服务和shell脚本。直接从SQL代理调用该过程(假设MS SQL Server)。

编辑:那么你的设计很复杂。说,你想要的时间有多精确?你想要时间精确到一分钟,一小时,一天吗?如果所需的精度是几分钟的线,那么这就是你能做的。在数据库中有一个过程。它是在精确边界上执行(通过SQL代理) - 例如,每5分钟执行一次。检查现在是否是运行服务的时间。如果是这样,请让它调用该服务。 XMLHTTP和OLE自动化可能是要走的路;查找系统过程sp_OACreate,sp_OAMethod。像这样:

declare @o int
exec sp_OACreate 'Msxml2.XMLHTTP', @o output
exec sp_OAMethod @o, 'open', @bstrMethod='GET', @bstrUrl='http://what-have-you/'
exec sp_OAMethod @o, 'send'

程序sp_OAxxx被认为是非常不安全的,并且需要相当大的权限才能运行。