【问题标题】:Background Worker Thread in WebService contextWebService 上下文中的后台工作线程
【发布时间】:2009-08-06 16:48:04
【问题描述】:

好的,所以我在 web 服务中有 Call1,它将启动一个免费的工作线程以开始进行一些处理,但希望有另一个调用 (Call2) 将通过引用监视原始工作线程?

关于如何做到这一点的任何建议?我真的很想远离 WinService 来做我的处理。因为我需要它更实时。

【问题讨论】:

  • 我不确定我理解你所说的 Call2 是什么意思来“监控”线程。您的意思是让 Call2 查看与线程正在执行的任务相关的一些进度状态并报告给调用者吗?
  • 是的,这正是我所需要的。我想我在这里找到了答案……stackoverflow.com/questions/228775/…
  • 这会起作用,但没有一个很好的机制来检查 Call2 中的线程。

标签: c# web-services backgroundworker


【解决方案1】:

我不明白为什么使用服务应用程序会有问题。服务一直在运行,并且可以实时监控它们。

但是,如果您真的不想走那条路,那么还有其他选择。可以使用 ThreadPool 或手动启动一个新线程来启动一个新线程,该线程将在运行 Web 服务的应用程序池的后台运行。

您可能需要为此使用任务调度程序库。请查看Quartz.net

请注意,如果 IIS 认为有必要,运行您的 Web 服务的应用程序域可能会随时被终止,因此无法保证该作业会完成。使用服务应用程序将解决此问题。

【讨论】:

  • 我没有考虑应用域问题。你是对的,这根本不会被保存......将直接事件发送到 Windows 服务而不是依靠计时器来检查数据库是否有新工作有多容易?
  • 如果您使用的是 .NET 3.5,您可以使用 WCF 在您的服务应用程序中直接托管 Web 服务。这样您就可以公开与您的服务直接交互的方法。如果这不是一个选项,那么您可以使用 Remoting 从您的 Web 服务与您的服务应用程序进行通信。这不是很困难,但比 WCF 方法更笨拙。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-05
  • 2011-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多