2013-05-16 29 views
5

Używam COM Interop i ja tworzę obiekt klasy COM z biblioteki interop Tak, kilka razy obiekt jest tworzony z powodzeniem i wykonuje zdalne wywołania proceduralne bez problemu, ale czasami zgłasza wyjątek, taki jak serwer RPC jest nieunikniony. Składnik COM, którego używam jest napisany w VB i używam tego składnika w języku C#.COM Interop, serwer RPC jest niedostępny w C#

Czy ktoś może podać mi możliwe przyczyny problemu (serwer RPC jest niedostępny) i rozwiązania tego problemu.

Jestem teraz bezradny wobec tego problemu.

Więc Advance dzięki jeśli może mi pomóc

+0

Więc to jest serwer COM Out-of-Process (.EXE) napisany w VB ... co? VB.NET? VB6? –

+0

to jest inny .exe i to jest VB6 –

Odpowiedz

6

Po zapoznaniu się moje podejście do realizacji COM znalazłem błąd. Używałem klasy statycznej do inicjowania instancji COM, a inicjowanie odbywało się w konstruktorze statycznym. Tak więc inicjalizacja była wykonywana raz na sesję aplikacji. W przypadku, gdy wystąpienie komendy zostanie uszkodzone lub zostanie usunięte, wywołanie metod COM spowoduje zgłoszenie wyjątku (serwer RPC jest niedostępny). Więc użyłem następujące podejście do przezwyciężania problemu

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

jeśli instancja com jest w stanie dokonać połączenia następnie zbyć instancji i ponownie zainicjować COM i uzyskać instancji, a następnie wykonać połączenie do serwera RPC.