检查C#中的服务器运行状态。检查服务器进程的状态(业务操作)

时间:2012-01-20 19:09:30

标签: c# multithreading thread-state

客户端应用程序在服务器上启动进程(通过RIA,但实现并不重要)。当我说流程时,我的意思是业务代码运行,而不是指在CPU上运行的实际流程。

代码是C#。

然后客户端检查以查看进程状态。失败,完成,仍在运行。

基础知识相对容易实现。我在服务器上静态存储进程ID,客户端可以在该服务器上定期轮询服务器以检查将检查与进程ID相关联的状态的进程。

围绕此问题的边缘情况需要更多的工作。异常中止线程(进程)而不允许代码处理异常并正常设置与进程关联的状态失败的致命和灾难性原因。在这种情况下,客户端将继续假设该过程仍在进行中。

我正在考虑在一个单独的线程中运行该进程并跟踪线程ID。当客户端调用服务器检查进程状态时,我们可以检查运行该进程的线程的IsAlive属性。

我想知道是否有任何可能出现问题的情况?也许有可能IsAlive会返回True,尽管线程已挂起。

另一种方法是让服务器上的进程定期设置一个时间戳,当客户端检查状态时可以使用该时间戳。检查状态的代码可以查看时间戳的年龄,然后根据我们选择的任何时间间隔(比如2分钟),它可以决定进程是否仍在运行(自上次写入时间戳后2分钟没有通过),或者进程有timedout无例外(自线程写完最后一个时间戳以来已超过2分钟)。所有时间戳都将在内存中完成。

是否有任何可能有益的最佳做法?有没有人对如何最好地解决这个问题有任何特别的见解或提示?我也对人们有其他场景或想法持开放态度?

1 个答案:

答案 0 :(得分:0)

我确信更好的方法是拥有一个完全控制的服务器应用程序,它可以处理所有事务,包括每个业务流程的异常并保持所有状态。如果客户端收到StateChanged事件而不是轮询(例如使用WCF双工信道),则更好。你做的基本上是1999年。 .NET几乎免费为您提供所有的东西。正确的架构实际上写得更快,而且支持时间更便宜。