COM是否提供延迟关闭的方法,直到完成所有RPC?

时间:2017-01-30 16:04:39

标签: com rpc lifecycle shutdown

我有两个流程:客户端和服务器。客户端拨打服务器开始处理的呼叫,但服务器可以在呼叫完成之前开始关闭。这可能导致调用所需的对象突然被破坏,从而导致崩溃。

客户端和服务器通过COM进行通信。在这种情况下,某些东西可以告诉来自给定服务器进程的当前活动RPC的数量非常有用。

作为这两个进程之间的通信层,COM是否在有活动交互时提供延迟关闭的任何帮助?

2 个答案:

答案 0 :(得分:0)

我不知道哪些语言用于实现您的COM客户端/服务器。

但据我所知,看起来您正面临COM多线程问题。 COM服务器的线程模型是什么? (我想它是多线程的)

如果是这样的话,你应该同步你的线程。

过度的方法是将COM服务器的线程模型转换为单线程模型。在这种情况下,服务器关闭呼叫将在先前的客户端呼叫完成后执行。

答案 1 :(得分:0)

  • 我怀疑你真的想要{C}对象的构造函数中的CoAddRefServerProcess(以及析构函数中的CoReleaseServerProcess)。 这将使您的服务器保持活动状态,直到C ++对象消失。 但是,这不会阻止客户端请求新实例,因此您可能还需要:
  • CoRevokeClassObject以防止客户端的新实例获取代理。
  • 如果您感觉真的讨厌,CoDisconnectObject会强制断开代理与服务器的连接。
  • *