我们有一些工具和服务可以与同一个 COM 服务器通信。一段时间后我们得到错误
COMException (0x800706BA) RPC 服务器不可用
似乎一个应用程序阻止了 RPC,而第二个应用程序尝试通信但失败了。它永远不是同一个应用程序,有时需要几个小时才能发生。但最糟糕的是:在第一次出现 RPC 错误后,所属应用程序每次调用 COM 函数到此 COM 服务器时都会遇到相同的 RPC 错误 - 它已经死了。重新启动应用程序(或服务)后一切运行良好,直到下一次...... 有没有办法确定 RPC 是否可用,然后等到它可用?否则我必须创建一个新的 COM 对象并希望我不必重新启动应用程序。
感谢您的帮助。
最佳答案
(0x800706BA) RPC 服务器不可用 表示客户端无法联系 COM 服务器端的 RPC 服务器。请注意,RPC 服务器太忙 有一个单独的代码。这可能是因为发生了以下任一情况:
- COM 服务器在另一台机器上并且存在连接问题
- COM 服务器已通过退出进程或严重崩溃而终止
请注意,后者与您的描述非常相符——您实例化了一个 COM 对象,获得了一个指向它的指针,它工作了一段时间,然后发生了一些事情,任何通过该指针访问该对象的尝试都会产生 RPC 服务器不可用 因为好吧,很可能没有 COM 服务器进程在运行,并且它内部的 RPC 服务器也已消失。在这种情况下,您唯一可以做的有意义的事情就是重新实例化 COM 对象。您的应用程序中需要额外的逻辑来处理此类情况。
关于c# - 在错误 0x800706BA 之前捕获 RPC 锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20377540/