Generieren von Fehlerinformationen

Wenn bei einem Server oder einer Anwendung beim Aufrufen über RPC ein schwerwiegender Fehler auftritt, sollte er der RPC-Laufzeit angeben, dass ein Fehler aufgetreten ist, und im Idealfall Informationen zum Fehler hinzufügen, um die Problembehandlung zu vereinfachen.

Angeben schwerwiegender Fehler für die RPC-Laufzeit

Um auf einen Fehler bei der RPC-Laufzeit hinzuweisen, rufen Sie die RpcRaisException-Funktion auf, während im RPC-Thread die Ausnahme aufgerufen wurde, oder RpcAsyncAbortCall, wenn der Aufruf asynchron in einem anderen Thread verarbeitet wird. Das Zurückgeben eines Fehlercodes aus der Serverroutine, z. B. der Managerroutine, ist nicht ausreichend. Gemäß der RPC-Spezifikation weist der Rückgabewert der Funktion unabhängig von den idl/acf-Dateieinstellungen keine Fehlersemantik auf dem Server auf.

Wenn in Ihrer Komponente ein schwerwiegender Fehler auftritt, führen Sie eine Bereinigung durch, die als notwendig angesehen wird, und rufen Sie dann die RpcR rpcR rpcException-Funktion mit dem Fehlercode auf. Der einzige Unterschied zwischen RpcRhowException und der Rückgabe eines Fehlercodes besteht darin, dass die out-Parameter nicht gemarshallt werden, wenn die RpcRhowException aufgerufen wird. Dies ist in der Regel ein Vorteil, da die Vermeidung nicht initialisierter Out-Parameter unnötig wird.

Generieren zusätzlicher erweiterter Fehlerinformationen

So wie die RPC-Laufzeit eine Kette von Fehlerdatensätzen erstellt, kann Ihr Server oder Ihre Anwendung der Kette eigene Datensätze hinzufügen. Dieser Ansatz hilft häufig bei der Problembehandlung. Beispielsweise kann ein Server versuchen, eine bestimmte Datei zu öffnen und einen Fehler vom Typ "Datei nicht gefunden" zu erhalten. Die einfache Rückgabe von Fehler 2 wäre nicht hilfreich, um zu bestimmen, welche Datei fehlt.

Stattdessen könnte Ihr Server die RpcErrorAddRecord-Funktion aufrufen und einen Zeichenfolgenparameter ( ANSI oder Unicode) im Fehlerdatensatz angeben, der den vollständigen Pfad der gesuchten Datei angibt. Wenn all diese Informationen auf dem Benutzerbildschirm auf einem Remotecomputer angezeigt werden, wird die Problembehandlung trivial. Eine einfache Überprüfung, ob die Datei vorhanden ist, kann durchgeführt werden, insbesondere, da der Name des betreffenden Computers bereits von der RPC-Laufzeit bereitgestellt wird.

Der RpcErrorAddRecord-Funktionsaufruf schlägt möglicherweise fehl, wenn nicht genügend Arbeitsspeicher verfügbar ist, obwohl nur wenige Bytes Heapspeicher erforderlich sind. Außerdem sammeln sich von RpcErrorAddRecord hinzugefügte Datensätze in einem bestimmten Thread an. Die Runtime bereinigt diese Datensätze normalerweise, bevor sie Ihre Serverroutine aufruft. Wenn jedoch erweiterte Fehlerinformationen außerhalb von RPC verwendet werden, sollten Sie den akkumulierten erweiterten Fehler im Thread bereinigen, indem Sie RpcErrorClearInformationaufrufen.