在COM中,当客户端死亡时,如何获得通知?

在COM中,当客户端死亡时,如何获得通知?,com,Com,我有一个COM解决方案,它有一个客户端(一个EXE)和一个服务器(一个service EXE)。当客户端被杀死或异常死亡时,我想在服务器上了解它。不幸的是,当这种情况发生时,COM似乎没有调用Release 如何判断COM客户机已死亡,以便我可以为其清理 更新:到目前为止的答案要求服务器有一个指向客户端的指针,并定期对其调用一个方法(ping)。我不想这样做,因为: 我目前没有回调指针(服务器->客户端),我宁愿避免引入回调指针,除非我真的必须这样做 这仍然不会对表示客户端端点的对象调用Rele

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

如何判断COM客户机已死亡,以便我可以为其清理

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

  • 我目前没有回调指针(服务器->客户端),我宁愿避免引入回调指针,除非我真的必须这样做
  • 这仍然不会对表示客户端端点的对象调用Release,这意味着我必须单独维护其他特定于客户端的资源,并保持从“端点”到其他资源的弱指针。我真的不能自己调用Release,以防COM决定稍后再调用它

  • 进一步到第二个问题:在COM中,有没有办法杀死客户端存根,而不是调用Release?我能为我的对象和接口找到存根管理器并告诉它进行清理吗?

    杀戮是一个非常极端的过程,因此CORBA、COM/DCOM和Java的RMI都没有明确的解决方法。相反,您可以创建非常简单的回调来实现“ping”。例如,它可以基于时间,也可以基于偶然性。
    您还可以考虑第三个EXE,它充当客户端的监视器,并向服务器(服务)提供通知。

    杀戮是一个非常极端的过程,因此CORBA、COM/DCOM和Java的RMI都没有明确的解决方法。相反,您可以创建非常简单的回调来实现“ping”。例如,它可以基于时间,也可以基于偶然性。
    您还可以考虑使用第三个EXE,它作为客户端的监视器,并向服务器(服务)提供通知。

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

    在多线程单元设置中,这可以在后台线程上运行

    此测试应使用一个保证在客户端处于活动状态时向客户端发出的调用从服务器调用客户端,例如对客户端对象的QueryInterface调用

    意外故障可被视为客户端已死亡的指示


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

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

    在多线程单元设置中,这可以在后台线程上运行

    此测试应使用一个保证在客户端处于活动状态时向客户端发出的调用从服务器调用客户端,例如对客户端对象的QueryInterface调用

    意外故障可被视为客户端已死亡的指示


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

    您必须轮询讣告栏。您必须轮询讣告栏。