应用程序处理呼叫阻止

时间:2014-09-03 10:14:34

标签: c# .net asp.net-mvc multithreading azure

我有ASP.NET MVC应用程序,它托管在Azure CLoud服务上。

我正在使用CQRS架构和命令处理程序。

此系统始终具有正在运行的线程,这些线程始终在后台运行。应用的主要目标是为医疗中心患者发送短信。系统使用以下步骤:

  1. 系统启动命令(例如StartMessageSending) 选择一些患者
  2. 它向他们发送短信通知
  3. 并按照确定的时间间隔进入睡眠状态。
  4. 在间隔超时后,该线程重复所有先前的步骤,直到任何患者都有发送。

    与此并行,系统可以使用相同的命令(StartMessageSending)运行任意数量的另一个线程。平均而言,系统有大约3个同时运行的线程和StartMessageSending命令。

    如果我查看应用程序日志,我会看到频繁调用Application Dispose。 而这些处理会导致系统的奇怪行为:命令无法完成工作。

    我举两个日志的例子:

    1)正确命令工作

    enter image description here

    2)错误的命令工作

    enter image description here

    在应用程序调用后多次处理。 间隔配置等于30秒。 enter image description here

    在这些App Disposes当前工作命令完成其工作后。

    我想注意,我在IIS上禁用idleTimeout(20分钟未使用)超时并设置为特定的夜间periodicRestart IIS回收。

    此外,应用程序非常庞大,并且在处理不同命令时经常会出现此问题。我举一个问题的一般描述的例子。

    所以可能有人知道:

    1)如何阻止这些应用程序处置?

    2)或者他们打电话的可能原因是什么? (一般而言)

    谢谢:)

1 个答案:

答案 0 :(得分:2)

理想的修复方法是将消息发送逻辑移动到辅助角色,并使用队列将命令发送给辅助角色。

但是作为一个快速修复,你可以不断地“ping”你自己的应用程序,这样它就不会被关闭(不常见),本文将介绍如何做到这一点。

http://weblog.west-wind.com/posts/2007/May/10/Forcing-an-ASPNET-Application-to-stay-alive

相关问题