当前位置 : 主页 > 大数据 > 区块链 >

COM Interop,RPC服务器在c#中不可用

来源:互联网 收集:自由互联 发布时间:2021-06-22
我正在使用COM Interop,我正在从interop dll实例化COM类对象 因此,很少有对象被成功实例化并进行远程过程调用而没有任何问题,但有时会引发异常,例如RPC Server无法使用. 我正在使用的COM组件
我正在使用COM Interop,我正在从interop dll实例化COM类对象
因此,很少有对象被成功实例化并进行远程过程调用而没有任何问题,但有时会引发异常,例如RPC Server无法使用.
我正在使用的COM组件是用VB编写的,我在c#中使用该组件.

那么,任何人都可以告诉我问题的可能原因(RPC服务器不可用)和解决此问题的方法.

我现在对这个问题很无奈.

所以,如果你能帮助我,请致谢

在审查了我的COM实现方法后,我发现了这个bug.我使用静态类初始化COM实例,初始化的东西发生在静态构造函数中.因此,每个应用程序会话都要进行一次初始化.在这种情况下,当com实例被破坏或被丢弃时,调用COM方法会引发异常(RPC Server不可用).
所以,我使用以下方法来克服这个问题

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 Server.

网友评论