2013-05-16 29 views
5

Sto usando un'interoperabilità COM e sto istanziando l'oggetto classe COM dalla dope di interoperabilità Quindi, poche volte l'istanza viene istanziata con successo ed effettua chiamate di procedura remota senza problemi ma a volte genera un'eccezione come RPC Server non è visualizzabile. La componente COM che sto usando è scritta in VB e sto consumando quel componente in C#.COM Interop, il server RPC non è disponibile in C#

Quindi, qualcuno può dirmi le possibili ragioni del problema (Server RPC non è disponibile) e soluzioni a questo problema.

Sono impotente con questo problema ormai.

Quindi, Advance grazie se mi può aiutare

+0

Quindi è un server COM Out-Of-Process (.EXE) scritto in VB ... cosa? VB.NET? VB6? –

+0

è diverso .exe e questo è VB6 –

risposta

6

Dopo aver esaminato il mio approccio per l'attuazione COM Ho trovato il bug. Stavo usando una classe statica per inizializzare l'istanza di COM e roba di inizializzazione stava avvenendo nel costruttore statico. Quindi, l'inizializzazione veniva eseguita una volta per sessione dell'applicazione. Nel caso in cui l'istanza di COM venga danneggiata o venga eliminata, la chiamata ai metodi COM genera un'eccezione (il server RPC non è disponibile). Così, ho usato seguente approccio per superare il problema

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(); 
} 

se l'istanza di COM è in grado di effettuare chiamate poi smaltire l'istanza e reinizializzare il COM e ottenere esempio, allora le chiamate al server RPC.