我正在开发一个包含 WCF 服务的 ASP.NET 应用程序,该服务旨在充当模拟生产环境的测试替身。它代表一个非常复杂的后端,可以通过它的 Web 服务接收订单,然后数小时或数天后发送通知(通过调用其他系统上的 Web 服务)。
这个测试双重应用程序的第一个版本的要求之一是它是无状态的,即没有数据库。
不再参与该项目的原始开发人员实施的设计是:
- 通过网络服务接收订单。
- 产生一个后台线程
- 向客户端返回预设响应
- 然后后台线程休眠 5 - 30 秒,发送通知,再次休眠,发送通知,可能重复三到四次,最后在无事可做时终止
线程休眠 5 - 30 秒旨在模拟生产系统的数小时和数天延迟。每个后台线程的生存时间不会超过三分钟。
目前,该设计似乎可以很好地实现其目的。到目前为止,这种方法遇到的唯一问题是,如果发生导致应用程序重新启动的事情(web.config 更改、部署的新 DLL、重新启动 IIS 等),后台线程似乎会被终止,并且任何挂起的通知后台线程永远不会发生。
客户现在决定 5 - 30 秒的延迟太短,通知之间延迟 5 分钟更合适。这意味着后台线程的生命周期可能超过 20 分钟。
我的直觉是,延迟五分钟可能不是这个设计的好主意。我很想看看人们对此有何看法。
随着延迟的增加,这种设计的可靠性如何?是否有人对 ASP.NET 中长时间运行的后台线程有任何经验可以对此发表评论?