【发布时间】:2017-01-30 16:04:38
【问题描述】:
我有两个进程:一个客户端和一个服务器。客户端发出一个呼叫,服务器开始处理,但服务器可以在呼叫完成之前开始关闭。这可能会导致调用所需的对象突然被破坏,从而导致崩溃。
客户端和服务器通过 COM 进行通信。在这种情况下,告诉给定服务器进程当前活跃的 RPC 数量的信息将非常有用。
作为这两个进程之间的通信层,COM 是否可以在它们进行主动交互时提供任何帮助来延迟关闭?
【问题讨论】:
-
这是一个无意义的问题,服务器只允许在最后一次 Release() 调用它发出的最后一个接口指针后关闭。忽略这个要求,或者引用计数错误,当然会炸毁客户端代码。它在 ATL 中是自动的,如果您自己执行,请查看 CoAddRefServerProcess() 的文档。
-
客户端通过代理与服务器对话,代理是一个 COM 对象。此代理引用服务器进程中的对象,这些对象不是 COM 对象,只是简单的 C++ 类。这些 C++ 类可以从不同线程上的代理中销毁和引用。我想先阻止客户端和服务器之间的进一步通信,然后等到正在进行的通信完成,然后执行关闭。
标签: com rpc lifecycle shutdown