检查C#中的服务器操作状态.检查服务器进程(业务操作)的状态
本文关键字:检查 状态 服务器 操作 业务 进程 | 更新日期: 2023-09-27 18:20:52
客户端应用程序在服务器上启动进程(通过RIA,但实现并不重要)。当我说进程时,我指的是正在运行的业务代码,而不是指在CPU上运行的实际进程。
代码是C#。
然后客户端进行检查以查看进程状态。失败,已完成,仍在运行。
基本功能相对容易实现。我在服务器上静态存储一个进程Id,客户端可以在其中定期轮询服务器以检查进程,该进程将检查与进程Id相关的状态。
围绕这一点的边缘案例需要更多的工作。异常中止线程(进程)而不允许代码处理异常并将与进程相关的状态正常设置为失败的致命和灾难性原因。在这种情况下,客户端将继续假设该过程仍在进行中。
我想在一个单独的线程中运行进程,并跟踪线程id。当客户端调用服务器检查进程状态时,我们可以检查运行进程的线程的IsAlive属性。
我想知道是否有任何情况下这可能会有问题?也许IsAlive有可能返回True,尽管线程已挂起。
另一种方法是让服务器上的进程定期设置一个时间戳,该时间戳可以在客户端检查状态时使用。检查状态的代码可以看到时间戳有多旧,然后根据我们选择的时间间隔(比如说2分钟),它可以决定进程是否仍在运行(自上次写入时间戳以来还没有过2分钟)或进程是否有时间戳(自线程写入上一个时间戳以来已经过了2分钟以上)。所有的时间戳都将在内存中完成。
围绕这一点,是否有任何有益的最佳实践?有人对如何最好地解决这个问题有什么特别的见解或建议吗?我也对人们的其他场景或想法持开放态度?
我相信更好的方法是拥有一个完全受控的服务器应用程序,它可以处理所有事务,包括每个业务流程的异常,并维护所有事务的状态。如果客户端接收StateChanged事件而不是轮询(例如WCF双工通道),则情况会更好。你做的基本上是1999年。NET几乎是免费的。正确的体系结构实际上写起来更快,支持起来更便宜。