在COM中,如何在客户端死亡时收到通知?

时间:2010-01-04 15:07:16

标签: com

我有一个客户端(EXE)和服务器(服务EXE)的COM解决方案。当客户端被杀或异常死亡时,我想在服务器中了解它。不幸的是,当发生这种情况时,似乎COM不会调用Release。

我如何判断COM客户端已经死亡,以便我可以清理它?

更新:到目前为止,答案要求服务器有一个指向客户端的指针,并定期调用它上面的方法(ping)。我宁愿不这样做,因为:

  1. 我目前没有回调指针(server->客户端),我宁愿避免引入一个,除非我真的需要。
  2. 这仍然不会在代表客户端端点的对象上调用Release,这意味着我必须单独维护其他特定于客户端的资源,并保持从“端点”到其他资源的弱指针。如果COM决定稍后再做,我无法真正调用Release。
  3. 继续第二步:在COM中有没有办法杀死客户端存根,而不是调用Release?我可以获取对象和接口的存根管理器并告诉它进行清理吗?

2 个答案:

答案 0 :(得分:0)

Killing是一个相当极端的过程,所以CORBA,COM / DCOM和Java的RMI都没有明确的解决方法。相反,您可以创建非常简单的回调来实现'ping'。它可以是例如基于时间的或偶尔的基础。 您还可以考虑第三个EXE - 作为客户端的监视器,并向服务器(服务)提供通知。

答案 1 :(得分:0)

最简单的解决方案是服务器在计时器上运行PING测试。

在多线程公寓设置中,这可以在后台线程上运行。

此测试应该从服务器调用到客户端,并且如果它处于活动状态,则保证将其发送到客户端,例如对客户端对象的QueryInterface调用。

意外失败可视为客户已死的迹象。

服务器需要管理智能ping的客户端列表,并确保ping逻辑本身不会使客户端保持活动状态。

相关问题