在错误0x800706BA之前捕获RPC锁

时间:2013-12-04 14:08:45

标签: c# com rpc

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

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

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

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

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

  • COM服务器在另一台计算机上,存在连接问题
  • COM服务器已退出,无论是退出进程还是通过崩溃

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

答案 1 :(得分:0)

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

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