c# - 在错误 0x800706BA 之前捕获 RPC 锁

标签 c# com rpc

我们有一些工具和服务可以与同一个 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/

相关文章:

c# - 在 C# 中比较两个列表,并使用 LINQ 或 foreach 根据条件拒绝或选择子列表

add-in - Excel COM 加载项对话框中断脚本

c# - WMI RPC 服务器不可用。 (来自 HRESULT : 0x800706BA) 的异常

performance - RestyGWT 与 RequestFactory

c++ - Lua RPC 和用户数据

javascript - 在查询字符串处传递 '+'

c# - 如何按只能在排序过程中获得的值对列表进行排序?

c# - 更新文档中的数组时,如何在 MongoDB 和 C# 中使用 $push 更新修饰符

windows - OCX 的入口点

c++ - 将我的 DDiscMaster2Events 连接/链接到什么以进行驱动器更改事件。微软 COM 对象