Freigeben über


Fehlerbehandlung (RPC)

Bei synchronem RPC führt ein Client einen Remoteaufruf aus, der entweder mit einem Erfolgs- oder Fehlercode zurückgegeben wird. Asynchroner RPC bietet mehr Möglichkeiten für einen Anruf zum Fehlschlagen, und diese Fehler werden je nach Ort und Wann unterschiedlich behandelt. In der folgenden Tabelle werden die Möglichkeiten beschrieben, wie ein Aufruf fehlschlagen kann und wie er behandelt wird.

Clientseitige Bereinigung

Fehlersymptom Säuberungsaktion
Client fängt eine Ausnahme ab, wenn sie die Remoteprozedur aufruft. Es sind keine RPC-API-Aufrufe erforderlich. Der gesamte RPC-Zustand wurde bereinigt.
Der Client empfängt eine vollständige Anrufbenachrichtigung, aber wenn er RpcAsyncCompleteCall-aufruft, erhält er einen Fehlercode. Es sind keine RPC-API-Aufrufe erforderlich. Der gesamte RPC-Zustand wurde bereinigt.
Der Client gibt einen nicht abgebrochenen oder abgebrochenen Abbruch aus. Der Client muss auf Benachrichtigung warten und RpcAsyncCompleteCall- aufrufen, wenn die Benachrichtigung eingeht.

 

Bei der serverseitigen Bereinigung ist ein Schlüsselkonzept der Übergabepunkt. Während der serverseitigen Verarbeitung eines asynchronen Aufrufs wird eine Verarbeitung in der Regel für den Thread ausgeführt, der den Aufruf empfangen hat (auch als Dispatcher-Threadbezeichnet), und optional übergibt der Dispatcherthread genügend Zustand in einen Speicherblock und signalisiert einen anderen Thread (auch bekannt als Workerthread), um die Verarbeitung für den Anruf fortzusetzen. Der Moment, in dem der Dispatcherthread erfolgreich signalisiert, dass der Arbeitsthread als Übergabepunktbezeichnet wird.

Serverseitige Bereinigung

Fehler aufgetreten Säuberungsaktion
Vor Übergabepunkt. Ausnahme auslösen. Es ist kein Aufruf von RpcAsyncCompleteCall- erforderlich.
Nach Übergabepunkt. Rufen Sie RpcAsyncAbortCall auf, oder, wenn der Fehler nicht schwerwiegend ist und die Ergebnisse weiterhin an den Client zurückgegeben werden können, RpcAsyncCompleteCall-. Wenn der RpcAsyncCompleteCall- Funktionsaufruf fehlschlägt, gibt die RPC-Laufzeit die Parameter frei. Der Benutzer darf nicht auf diese Parameter zugreifen. Der Dispatcherthread darf keine wesentliche Verarbeitung durchführen, die nach dem Übergabepunkt fehlschlägt, da er den Aufruf nicht mehr sicher abbrechen kann. Insbesondere darf eine Ausnahme nach dem Übergabepunkt nicht ausgelöst werden, oder der Server stürzt ab.

 

Spezielle Fehlerbehandlungsfälle für Rohre

Bei der Verwendung von Rohren gibt es spezielle Fälle für die Fehlerbehandlung. In der folgenden Liste wird die Quelle des Fehlers und die Behandlung des Fehlers erläutert.

Fehlerquelle So wird's gehandhabt
Clientanrufe pushen und der Anruf schlägt fehl. Es sind keine RPC-API-Aufrufe erforderlich. Der gesamte RPC-Zustand wurde bereinigt.
Clientaufrufe RpcAsyncCompleteCall-, bevor die in Pipes abgelassen werden. Der Aufruf schlägt mit dem entsprechenden Fehlercode für das Pipeausfüllen fehl.
Clientanrufe rufen Pull ab, und der Anruf schlägt fehl. Es sind keine RPC-API-Aufrufe erforderlich. Der gesamte RPC-Zustand wurde bereinigt.
Client- oder Serveraufrufe pushen oder ziehen in die falsche Reihenfolge. Laufzeit gibt den Fehlerstatus der Pipeausfüllung zurück.
Serveranrufe pushen oder pull, und der Anruf schlägt fehl. Push gibt einen Fehlercode zurück. Es ist kein Aufruf von RpcAsyncCompleteCall- erforderlich.
Serveraufrufe RpcAsyncCompleteCall-, bevor die Rohre entwässert wurden. Der Pipeaufruf gibt einen Fehlerstatus für die Rohrfüllung zurück.
Nach der Versendung schlägt ein Empfangsvorgang fehl. Beim nächsten Aufruf des Serveraufrufs zum Empfangen von Pipedaten wird ein Fehler zurückgegeben.