C# 捕获错误0x800706BA之前的RPC锁

C# 捕获错误0x800706BA之前的RPC锁,c#,com,rpc,C#,Com,Rpc,我们有一些与同一个COM服务器通信的工具和服务。过了一段时间,我们得到了错误 COMException(0x800706BA)RPC服务器不可用 似乎一个应用程序阻塞了RPC,而第二个应用程序尝试通信并失败。它从来都不是同一个应用程序,有时需要几个小时才能实现。但最糟糕的是:在RPC错误第一次出现之后,所属应用程序每次调用COM函数到此COM服务器时都会收到相同的RPC错误-它已经死了。重新启动应用程序(或服务)后,所有程序都运行良好,直到下一次。。。 是否有一种方法可以决定RPC是否可用,然后

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

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

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

感谢您的帮助。

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

  • COM服务器位于另一台计算机上,存在连接问题
  • COM服务器已通过退出进程或突然崩溃而终止

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

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

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

  • 这是一个严重错误,您无法从中恢复。你必须寻找网络问题来接近真正的原因。嗯,网络问题。我希望你不是对的。所有应用程序都在同一台机器上运行(至少我希望如此)。有没有办法监听端口111来解决这个问题?非常感谢您的帮助。我会尝试,但它会极大地破坏我的代码。