【问题标题】:Catch RPC lock before error 0x800706BA在错误 0x800706BA 之前捕获 RPC 锁
【发布时间】:2013-12-04 14:08:44
【问题描述】:

我们有一些工具和服务可以与同一个 COM 服务器进行通信。一段时间后我们得到错误

COMException (0x800706BA) RPC 服务器不可用

似乎一个应用程序阻止了 RPC,而第二个应用程序尝试通信并失败。它不是同一个应用程序,有时需要几个小时才能发生。但最糟糕的是:在第一次出现 RPC 错误后,所属应用程序每次调用此 COM 服务器的 COM 函数时都会收到相同的 RPC 错误 - 它已经死了。重新启动应用程序(或服务)后一切运行良好,直到下一次...... 有没有办法决定 RPC 是否可用,然后等到它免费?如果不是,我必须创建一个新的 COM 对象并希望我不必重新启动应用程序。

感谢您的帮助。

【问题讨论】:

  • 这是一个严重错误,您无法从中恢复。您必须寻找网络问题才能接近真正的原因。
  • 嗯,网络问题。我希望你是不对的。所有应用程序都在同一台机器上运行(至少我希望如此)。有没有办法在 111 端口监听来解决这个问题?

标签: c# com rpc


【解决方案1】:

(0x800706BA) RPC 服务器不可用 表示客户端无法联系 COM 服务器端的 RPC 服务器。请注意,RPC 服务器太忙有一个单独的代码。这可能是因为发生了以下任一情况:

  • COM 服务器在另一台机器上,存在连接问题
  • COM 服务器因退出进程或严重崩溃而终止

请注意,后者与您的描述非常匹配 - 您实例化了一个 COM 对象,获得了指向它的指针,并且它工作了一段时间,然后发生了一些事情,并且任何通过该指针访问该对象的尝试都会产生 RPC 服务器不可用 因为好吧,很可能没有 COM 服务器进程在运行,并且它内部的 RPC 服务器也消失了。在这种情况下,您唯一可以有意义地做的就是重新实例化 COM 对象。您需要在您的应用程序中添加额外的逻辑来解决此类情况。

【讨论】:

  • 非常感谢您的帮助。我会尝试这样做,但它会大大破坏我的代码。
【解决方案2】:

我在 COM+ 对象中遇到了这个错误,并得到了解决。如果在应用程序中创建并使用了 COM+ 对象,并且随着时间的推移,如果 COM+ 应用程序被回收,则重复使用相同的 COM+ 对象会产生此错误。您可能必须重新实例化 COM+ 对象才能使其再次工作。 您可以尝试以下步骤重现错误:

  1. 将 COM+ 应用程序的生命周期循环限制设置为 1 分钟。
  2. 编写应用程序来创建 COM+ 对象并调用 COM+ 方法。让应用程序休眠一分钟以上,然后尝试进行方法调用。
  3. 现在,您将收到错误 (0x800706BA) RPC 服务器不可用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    • 2013-05-30
    • 2019-06-18
    • 1970-01-01
    相关资源
    最近更新 更多