Udostępnij za pośrednictwem


Obsługa wyjątków (RPC)

RPC używa tego samego podejścia do obsługi wyjątków co interfejs API systemu Windows.

Struktura RpcTryFinally / RpcFinally / RpcEndFinally jest odpowiednikiem instrukcji try-finally systemu Windows. Konstrukcja wyjątku RPC RpcTryExcept / RpcExcept / RpcEndExcept jest odpowiednikiem instrukcji try-except systemu Windows.

W przypadku korzystania z procedur obsługi wyjątków RPC kod źródłowy po stronie klienta jest przenośny. Różne pliki nagłówków RPC podane dla każdej platformy rozwiązują makra RpcTry i RpcExcept. W środowisku systemu Windows te makra są mapować bezpośrednio na windows i instrukcje try-except. W innych środowiskach te makra są mapowane na inne implementacje obsług wyjątków specyficznych dla danej platformy.

Potencjalne wyjątki zgłaszane przez te struktury obejmują zestaw kodów błędów zwracanych przez funkcje RPC z prefiksami RPC_S_ i RPC_X oraz zestaw wyjątków zwracanych przez system Windows. Aby uzyskać szczegółowe informacje, zobacz Wartości Zwracane RPC.

Chociaż makra RpcTry i RpcExcept zapewniają niezależny od platformy sposób obsługi wyjątków, w systemie Windows Vista i nowszych wersjach systemu Windows RpcExceptionFilter jest zalecanym sposobem obsługi wyjątków. Nie wymaga pisania filtrów niestandardowych w celu przechwycenia wielu najczęstszych wyjątków strukturalnych; jednak niestandardowe filtry wyjątków nadal wymagają RpcExcept.

Wyjątki występujące w aplikacji serwera, wycinku serwera i bibliotece czasu wykonywania serwera (powyżej warstwy transportu) są propagowane do klienta. Żadne wyjątki nie są propagowane z warstwy transportowej serwera. Zalecaną metodą, aby procedura serwera zwracała błędy do środowiska wykonawczego RPC, jest zgłoszenie wyjątku. Procedura serwera może używać dowolnych metod, które są odpowiednie do komunikowania błędów między procedurami serwera, ale jeśli napotka błąd uniemożliwiający wykonanie procedury zdalnej, powinna zgłosić wyjątek po zakończeniu działań oczyszczających i przed powrotem do środowiska RPC, zamiast zwracać tę wartość do RPC, którą jedynie procedura serwera rozpozna jako błąd.

Na poniższej ilustracji przedstawiono sposób zwracania wyjątków z serwera do klienta.

wyjątki są zwracane z serwera do klienta za pośrednictwem odpowiedniego mechanizmu wykonawczego RPC każdego składnika

Procedury obsługi wyjątków RPC różnią się nieco od makr obsługi wyjątków Otwartego Oprogramowania Foundation-Distributed Computing Environment (OSF-DCE) TRY, FINALLYi CATCH. Różni dostawcy udostępniają pliki mapujące funkcje OSF-DCE RPC na funkcje RPC firmy Microsoft, w tym TRY, CATCH, CATCH_ALLi ENDTRY. Pliki nagłówkowe mapują również kody błędów RPC_S_* na odpowiedniki wyjątków OSF-DCE, rpc_s_*, oraz mapują kody błędów RPC_X_* na rpc_x_*. Dla przenośności OSF-DCE użyj tych plików nagłówkowych. Aby uzyskać więcej informacji na temat procedur obsługi wyjątków RPC, zobacz RpcExceptionFilter, RpcExcept, RpcFinally. Aby uzyskać więcej informacji na temat procedur obsługi wyjątków systemu Windows, zobacz Obsługa wyjątków strukturalnych.