我有一个客户端(EXE)和服务器(服务EXE)的COM解决方案。当客户端被杀或异常死亡时,我想在服务器中了解它。不幸的是,当发生这种情况时,似乎COM不会调用Release。
我如何判断COM客户端已经死亡,以便我可以清理它?
更新:到目前为止,答案要求服务器有一个指向客户端的指针,并定期调用它上面的方法(ping)。我宁愿不这样做,因为:
继续第二步:在COM中有没有办法杀死客户端存根,而不是调用Release?我可以获取对象和接口的存根管理器并告诉它进行清理吗?
答案 0 :(得分:0)
Killing是一个相当极端的过程,所以CORBA,COM / DCOM和Java的RMI都没有明确的解决方法。相反,您可以创建非常简单的回调来实现'ping'。它可以是例如基于时间的或偶尔的基础。 您还可以考虑第三个EXE - 作为客户端的监视器,并向服务器(服务)提供通知。
答案 1 :(得分:0)
最简单的解决方案是服务器在计时器上运行PING测试。
在多线程公寓设置中,这可以在后台线程上运行。
此测试应该从服务器调用到客户端,并且如果它处于活动状态,则保证将其发送到客户端,例如对客户端对象的QueryInterface调用。
意外失败可视为客户已死的迹象。
服务器需要管理智能ping的客户端列表,并确保ping逻辑本身不会使客户端保持活动状态。