Ausnahmebehandlung (RPC)

RPC verwendet den gleichen Ansatz für die Ausnahmebehandlung wie die Windows-API.

Die RpcTryFinally / RpcFinally / RpcEndFinally-Struktur entspricht der Try-finally-Anweisung von Windows. Das RPC-Ausnahmekonstrukt RpcTryExcept / RpcExcept / RpcEndExcept entspricht der Windows try-except-Anweisung .

Wenn Sie die RPC-Ausnahmehandler verwenden, ist Ihr clientseitiger Quellcode portierbar. Die verschiedenen RPC-Headerdateien, die für jede Plattform bereitgestellt werden, lösen die RpcTry - und RpcExcept-Makros für jede Plattform auf. In der Windows-Umgebung werden diese Makros direkt den Windows-Anweisungen try-finally und try-except zugeordnet. In anderen Umgebungen werden diese Makros anderen plattformspezifischen Implementierungen von Ausnahmehandlern zugeordnet.

Mögliche Ausnahmen, die von diesen Strukturen ausgelöst werden, sind der Satz von Fehlercodes, die von den RPC-Funktionen mit den Präfixen RPC_S_ und RPC_X zurückgegeben werden, sowie der Satz von Ausnahmen, die von Windows zurückgegeben werden. Weitere Informationen finden Sie unter RPC-Rückgabewerte.

Während die RpcTry - und RpcExcept-Makros eine anpassbare plattformunabhängige Möglichkeit zum Behandeln von Ausnahmen bieten, ist RpcExceptionFilter in Windows Vista und höheren Versionen von Windows die empfohlene Methode zur Behandlung von Ausnahmen. Es ist nicht erforderlich, dass benutzerdefinierte Filter geschrieben werden, um viele der häufigsten strukturierten Ausnahmen zu erfassen. Benutzerdefinierte Ausnahmefilter erfordern jedoch weiterhin RpcExcept.

Ausnahmen, die in der Serveranwendung, dem Serverstub und der Serverlaufzeitbibliothek (oberhalb der Transportebene) auftreten, werden an den Client weitergegeben. Von der Servertransportebene werden keine Ausnahmen weitergegeben. Die empfohlene Methode für eine Serverroutine zum Zurückgeben von Fehlern zur RPC-Laufzeit ist das Auslösen einer Ausnahme. Eine Serverroutine kann alle Methoden verwenden, die für die Kommunikation von Fehlern zwischen Serverroutinen geeignet sind. Wenn jedoch ein Fehler auftritt, der die Ausführung der Remoteprozedur verhindert, sollte sie nach dem Bereinigen und vor der Rückkehr zur RPC-Laufzeit eine Ausnahme auslösen, anstatt einen Wert an RPC zurückzugeben, den nur die Serverroutine als Fehler erkennt.

Die folgende Abbildung zeigt, wie Ausnahmen vom Server an den Client zurückgegeben werden.

Ausnahmen werden vom Server über die jeweilige RPC-Runtime jeder Komponente an den Client zurückgegeben.

Die RPC-Ausnahmehandler unterscheiden sich geringfügig von den OSF-DCE-Ausnahmebehandlungsmakros TRY, FINALLY und CATCH (Open Software Foundation-Distributed Computing Environment). Verschiedene Anbieter stellen Dateien bereit, die die OSF-DCE-RPC-Funktionen den Microsoft RPC-Funktionen zuordnen, einschließlich TRY, CATCH, CATCH_ALL und ENDTRY. Diese Headerdateien ordnen auch die RPC_S_*-Fehlercodes den OSF-DCE-Ausnahmeentsprechungen rpc_s_* zu und ordnen RPC_X_*-Fehlercodes rpc_x_* zu. Verwenden Sie für OSF-DCE-Portabilität diese Includedateien. Weitere Informationen zu den RPC-Ausnahmehandlern finden Sie unter RpcExceptionFilter, RpcExcept, RpcFinally. Weitere Informationen zu den Windows-Ausnahmehandlern finden Sie unter Strukturierte Ausnahmebehandlung.