代码之家  ›  专栏  ›  技术社区  ›  Martin Marconcini

在共享主机中启动IIS/WCF下的线程/进程的最佳方法

  •  1
  • Martin Marconcini  · 技术社区  · 16 年前

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

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

    我读过 this question in StackOverflow

    考虑到体系结构是固定的(即:我无法更改表,它来自传统格式,也无法更改WCF服务的机制),您对轮询/处理此表有何建议?

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

    谢谢

    3 回复  |  直到 8 年前
        1
  •  3
  •   blowdart    16 年前

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

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

        2
  •  1
  •   Guffa    16 年前

    web应用程序根本不适合以固定的时间间隔运行某些东西。如果没有请求传入,则应用程序中没有代码运行,并且如果应用程序在一段时间内处于非活动状态,IIS可以决定将其完全关闭,直到下一个请求传入。

    对于某些应用程序来说,以特定的时间间隔运行某个程序一点都不重要,只是最近运行过。如果您的应用程序是这样的,那么您可以跟踪表最后一次轮询的时间,对于每个请求,检查是否有足够的时间再次轮询表。

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

        3
  •  0
  •   George Mavritsakis    14 年前

    使应用程序池“始终处于活动状态”,并对线程执行任何操作。