【发布时间】:2014-09-03 10:14:33
【问题描述】:
我有托管在 Azure 云服务上的 ASP.NET MVC 应用程序。
我正在使用带有命令处理程序的 CQRS 架构。
而且这个系统总是有正在运行的线程,这些线程一直在后台工作。应用程序的主要目标是为医疗中心患者发送短信。系统按以下步骤工作:
- 系统启动命令(例如 StartMessageSending) 选择一些患者
- 它会向他们发送 SMS 通知
- 并在确定的时间间隔内进入睡眠状态。
在间隔超时后,此线程重复所有先前的步骤,直到存在任何要发送的患者。
与此并行,系统可以使用相同的命令(StartMessageSending)运行任意数量的其他线程。平均而言,系统大约有 3 个使用 StartMessageSending 命令同时运行的线程。
如果我查看应用程序日志,我会看到频繁调用 Application Dispose。 而这些 dispose 会导致系统出现奇怪的行为:命令没有完成它们的工作。
我举2个日志例子:
1) 正确指挥工作
2) 不正确指挥工作
之后,应用程序多次调用 dispose。 并且间隔配置等于 30 秒。
在这些 App Disposes 当前工作的命令之后不要完成它的工作。
我想指出,我在 IIS 上禁用了 idleTimeout(20 分钟未使用)超时,并设置为特定的夜间时间周期重新启动 IIS 回收。
而且应用程序非常庞大,这个问题在不同命令的工作中经常发生。我举了一个问题的一般描述的例子。
也许有人知道:
1) 我怎样才能防止这些应用程序处置?
2) 或者他们打电话的可能原因是什么? (一般)
谢谢:)
【问题讨论】:
-
虽然这些截图很可爱,但我们需要看看你的代码
-
@YuvalItzchakov,应用程序非常庞大,这个问题经常发生在不同命令的工作中。我举了一个问题的一般描述的例子。
-
一般描述是不够的。我们只能假设做错了什么,不能给我一个一般性的答案。请尝试对您的问题进行简单、小而完整的重现。
标签: c# .net asp.net-mvc multithreading azure