Срив на COM компонент

Когато имате част от софтуера, който изпълнява извънпроцесен COM сървър и COM сървърът се срине, ще покаже ли съобщение (да кажем, че е необработено изключение) на потребителя или какво ще се случи?

Също така, COM клиентът също ще се срине, знаейки, че този клиент разчита доста на този COM сървър?

Какво е поведението по отношение на COM сървър и COM клиент, когато в сървъра възникне необработено изключение?


person Tony The Lion    schedule 22.06.2010    source източник


Отговори (1)


COM клиентът ще получи RPC_E_SERVERFAULT като HRESULT от следващото COM повикване и всички останали, докато сървърът се рестартира. Това не е задължително да доведе до срив, стига клиентът да проверява своите кодове за грешки. Въпреки това, това вероятно не е възстановима грешка за клиента, така че при получаване на RPC_E_SERVERFAULT (или, всъщност, който и да е RPC_E код за грешка), вероятно трябва да започнете грациозно излизане.

person JSBձոգչ    schedule 22.06.2010
comment
Това не е всичко, ще получите този код за връщане, когато сървърът повдигне необработено изключение. Много трудно да се справя между другото. Трябва да получите RPC_E_SERVERDIED. Но да, не обработвайте нито една от тези грешки, клиентското приложение е мъртво. - person Hans Passant; 22.06.2010
comment
@Hans, дали ще получите RPC_E_SERVERDIED или RPC_E_SERVERFAULT зависи от точния начин, по който сървърът е умрял, но значението за клиента е основно същото. - person JSBձոգչ; 22.06.2010
comment
RPC_E_SERVERFAULT не кара сървъра да умре, за съжаление. Е, може би скучни подробности. - person Hans Passant; 22.06.2010