我正在使用 COM 互操作,并且我正在从互操作 dll 实例化 COM 类对象因此,有几次该对象被成功实例化并且可以毫无问题地进行远程过程调用,但有时它会引发异常,例如 RPC 服务器不可用。我正在使用的 COM 组件是用 VB 编写的,我正在 c# 中使用该组件。
那么,谁能告诉我这个问题的可能原因(RPC 服务器不可用)和解决这个问题的方法。
我现在对这个问题无能为力。
所以,如果你能帮助我,请提前谢谢
我正在使用 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 Server。