1

场景:WCF 服务从客户端接收 XDocument,对其进行处理并在 MS SQL 表中插入一行。

多个客户端可能同时调用 WCF 服务。通话通常不会花费很长时间(几秒钟)。

现在我需要一些东西来轮询 SQL 表并以异步方式运行另一组进程。第二个进程不需要回调任何东西,也不需要以任何方式与 WCF 相关。它只需要读取表格并执行一系列方法,也许还需要一个 Web 服务调用(当然,如果有记录的话),仅此而已。使用上述服务的 WCF 服务客户端对此一无所知,也不关心它。

在 StackOverflow 中阅读过这个问题,而且我也知道 Windows 服务是理想的,但是这个 WCF 服务将托管在共享主机(discountasp 或类似的)上,因此,安装 Windows 服务将不是一个选项(据我所知)。

鉴于架构是固定的(IE:我无法更改表,它来自旧格式,也无法更改 WCF 服务的机制),您对轮询/处理此表有何建议?

我会说我需要它每 10 分钟左右检查一次。它不需要是即时的。

谢谢。

4

3 回答 3

3

欺骗。将此进程公开为另一个 WCF 服务,并在预定时间从您控制的框中触发 go 命令。

虽然您可以在 WCF 中启动后台线程,或者使用缓存过期作为穷人的调度程序,但当您的应用程序池回收时,这些线程将停止,直到您的网站上的下一次点击并且应用程序池再次启动。至少从您控制的机器发出请求意味着您知道应用程序池将每 10 分钟左右恢复一次,因为您已经向其发送了请求。

于 2009-03-23T14:58:08.857 回答
1

Web 应用程序根本不适合以固定的时间间隔运行某些东西。如果没有请求进入,则应用程序中没有运行代码,如果应用程序有一段时间不活动,IIS 可以决定完全关闭它,直到下一个请求进入。

对于某些应用程序,以特定时间间隔运行某些东西并不重要,只要它最近运行过即可。如果您的应用程序是这种情况,那么您可以跟踪上次轮询表的时间,并为每个请求检查是否有足够的时间再次轮询表。

如果您有权管理数据库,则 SQL Server 中有一个调度程序。如果您有权限,它可以运行查询、存储过程,甚至启动进程(尽管这在共享主机上不太可能)。

如果您需要特定时间间隔的代码,并且您无法访问服务器来调度它或将其作为服务运行,或者无法使用 SQL Server 调度程序,那么它根本不可行。

于 2009-03-23T14:26:28.387 回答
0

让您的应用程序池“始终处于活动状态”并使用您的线程做任何您想做的事情。

于 2011-11-21T18:49:47.080 回答