gpt4 book ai didi

c# - 如何将 System.Threading.Timer 与 asp.net web 服务一起使用

转载 作者:太空狗 更新时间:2023-10-29 23:09:08 28 4
gpt4 key购买 nike

背景:我有一个用 C# 编写的在 Windows Server 2008 上运行的 .NET 4.0 Web 服务。我想在每天运行一次代码的 asp.net web 服务中运行一个计时器。我听说过这方面的一些限制(见下文),但我想问我的计划是否可以解决一些限制并将代码保留在 Web 服务中,因为它不是关键任务代码。然而,崩溃是 Not Acceptable 。注意:我不会也不能使用 WCF。

计划:

  • 在构造函数中声明并实例化System.Threading.Timer我的网络服务(就在注释掉的行旁边://InitializeComponent(); ).
  • 每 30 分钟触发一次计时器。
  • 注意:因为我使用的是 System.Threading.Timer,所以我不必运行根据下面的 msdn 提示 #6 保持事件代码。
  • 如果当前时间在我的数据库值的 30 分钟内(运行代码所需的时间)然后运行代码。

问题:

  • 我想知道使用上面的计划在 asp.net c# 代码中使用 System.Threading.Timer 有多可靠,如果它能正确运行,假设超过 97%时间?
  • 当回收应用程序池和重新启动 IIS 服务器时,此计划是否有效?

在网络服务中使用计时器似乎存在以下问题:

  • 应用池回收
  • 线程死亡
  • 没有人长时间访问网络
  • 时间内存问题(最好使用 windows 服务)

引用资料:

ASP.NET Site - Firing some code at a specific time

Timer on Website to activate Web Service calls every hour

http://forums.asp.net/t/1079158.aspx/1

http://msdn.microsoft.com/en-us/magazine/cc163854.aspx (参见提示 #6)

来自提示#6“位于 System.Threading 命名空间中的 Timer 类是 .NET Framework 中一个非常有用但鲜为人知的类,至少对于 Web 开发人员而言是这样。创建后,Timer 将以可配置的时间间隔从 ThreadPool 调用线程上的指定回调。这意味着您可以将代码设置为在没有传入请求到您的 ASP.NET 应用程序的情况下执行,这是后台处理的理想情况。您也可以在此后台进程中执行索引或发送电子邮件等工作。”

最佳答案

您为这项工作使用了错误的工具。 Web 服务用于按需使用,而服务和计划任务应用于周期性事件。将相关代码从 Web 服务移到共享库中,然后创建一个带有 Timer 的 Windows 服务或一个可以通过计划任务进行计划的控制台应用程序。

关于c# - 如何将 System.Threading.Timer 与 asp.net web 服务一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13070719/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com