【发布时间】:2013-03-19 05:20:09
【问题描述】:
我正在关注this 示例来创建自托管的 WCF 服务。理想情况下,如果某个值在数据库中更新,我希望服务与计时器连接每半小时检查一次,如果是,服务将执行一些任务,否则将每半小时检查一次。我在网上读到过,在 IIS 托管的 WCF 中使用计时器不是一个好主意,在自托管的 wcf 服务上使用它怎么样?有什么例子吗?
谢谢,
【问题讨论】:
我正在关注this 示例来创建自托管的 WCF 服务。理想情况下,如果某个值在数据库中更新,我希望服务与计时器连接每半小时检查一次,如果是,服务将执行一些任务,否则将每半小时检查一次。我在网上读到过,在 IIS 托管的 WCF 中使用计时器不是一个好主意,在自托管的 wcf 服务上使用它怎么样?有什么例子吗?
谢谢,
【问题讨论】:
我认为对您来说更好的选择是创建一个简单的控制台应用程序,如果值已更新,该应用程序将执行您的任务,然后在 Windows 中创建一个计划任务,该任务每半小时运行一次此控制台应用程序。这样您就可以让 Windows 管理计时部分,您只需编写检查数据库并在必要时更新它的代码。
不确定您运行的是哪个版本的 Windows,但您可以从控制面板访问计划任务。
【讨论】:
IIS 托管的 WCF 服务中的计时器“不是一个好主意”的原因是 IIS 服务的生命周期与自托管服务的生命周期大不相同。有关详细信息,请参阅此SO question and answer 和此MSDN article for even more details。
如果在超时期限内没有人连接到 WCF 服务,则基本上可以“关闭”托管在 IIS 中的服务。如果您需要像您所描述的那样进行定期定期维护,您将需要使用自托管服务并让该服务启动一个计时器,该计时器在其OnStart() 调用中每半小时触发一次。
【讨论】: