C# COM互操作,RPC服务器在c中不可用#

C# COM互操作,RPC服务器在c中不可用#,c#,com,com-interop,com+,.net-remoting,C#,Com,Com Interop,Com+,.net Remoting,我正在使用COM互操作,并且正在从互操作dll实例化COM类对象 因此,有几次对象被成功实例化并进行远程过程调用时没有任何问题,但有时它会抛出一个异常,如RPC服务器不可用。 我使用的COM组件是用VB编写的,我使用的是c# 那么,有人能告诉我问题的可能原因(RPC服务器不可用)和解决方案吗。 我现在对这个问题无能为力 因此,如果您能帮助我,请提前表示感谢。在回顾了我的COM实现方法之后,我发现了错误。我使用一个静态类来初始化COM实例,初始化工作在静态构造函数中进行。因此,每个应用程序会话都要

我正在使用COM互操作,并且正在从互操作dll实例化COM类对象 因此,有几次对象被成功实例化并进行远程过程调用时没有任何问题,但有时它会抛出一个异常,如RPC服务器不可用。 我使用的COM组件是用VB编写的,我使用的是c#

那么,有人能告诉我问题的可能原因(RPC服务器不可用)和解决方案吗。

我现在对这个问题无能为力


因此,如果您能帮助我,请提前表示感谢。

在回顾了我的COM实现方法之后,我发现了错误。我使用一个静态类来初始化COM实例,初始化工作在静态构造函数中进行。因此,每个应用程序会话都要进行一次初始化。在这种情况下,当com实例损坏或被释放时,调用com方法会引发异常(RPC服务器不可用)。 因此,我使用以下方法来克服这个问题

 try
  {
    m_COMObject.SomeMethod();
  }

  Exception(exception exception)
  {
    DisposeCOMObject();
    InitializeCOMOBject();
    COMObject.Somethod();
  }


 public void DisposeCOMObject()
{
  m_COMObject = null;
  var process = Process.GetProcessesByNames("COM .exe").FirstDefault();

   if(process != null)
    {
         process.kill();
       }
}


 public void InitializeCOMObject()
{
  m_COMObject = null;
  m_COMObject = new COMObject();
}

如果COM实例无法进行调用,则处置该实例并重新初始化COM并获取实例,然后调用RPC服务器。

因此它是用VB编写的进程外COM服务器(.EXE)。。。什么?VB.NET?VB6?它是不同的.exe,这是VB6