我有ASP.NET MVC应用程序,它托管在Azure CLoud服务上。
我正在使用CQRS架构和命令处理程序。
此系统始终具有正在运行的线程,这些线程始终在后台运行。应用的主要目标是为医疗中心患者发送短信。系统使用以下步骤:
在间隔超时后,该线程重复所有先前的步骤,直到任何患者都有发送。
与此并行,系统可以使用相同的命令(StartMessageSending)运行任意数量的另一个线程。平均而言,系统有大约3个同时运行的线程和StartMessageSending命令。
如果我查看应用程序日志,我会看到频繁调用Application Dispose。 而这些处理会导致系统的奇怪行为:命令无法完成工作。
我举两个日志的例子:
1)正确命令工作
2)错误的命令工作
在应用程序调用后多次处理。 间隔配置等于30秒。
在这些App Disposes当前工作命令完成其工作后。
我想注意,我在IIS上禁用idleTimeout(20分钟未使用)超时并设置为特定的夜间periodicRestart IIS回收。
此外,应用程序非常庞大,并且在处理不同命令时经常会出现此问题。我举一个问题的一般描述的例子。
所以可能有人知道:
1)如何阻止这些应用程序处置?
2)或者他们打电话的可能原因是什么? (一般而言)
谢谢:)
答案 0 :(得分:2)
理想的修复方法是将消息发送逻辑移动到辅助角色,并使用队列将命令发送给辅助角色。
但是作为一个快速修复,你可以不断地“ping”你自己的应用程序,这样它就不会被关闭(不常见),本文将介绍如何做到这一点。
http://weblog.west-wind.com/posts/2007/May/10/Forcing-an-ASPNET-Application-to-stay-alive