Asynchroner RPC

Rpc (Asynchroner Remoteprozeduraufruf) ist eine Microsoft-Erweiterung, die mehrere Einschränkungen des herkömmlichen RPC-Modells, wie sie von der Open Software Foundation–Distributed Computing Environment (OSF-DCE) definiert ist, anspricht. Asynchroner RPC trennt einen Remoteprozeduraufruf von seinem Rückgabewert, wodurch die folgenden Einschränkungen herkömmlicher synchroner RPC aufgelöst werden:

  • Mehrere ausstehende Aufrufe von einem Singlethread-Client. Im herkömmlichen RPC-Modell wird ein Client in einem Remoteprozeduraufruf blockiert, bis der Aufruf zurückgegeben wird. Dadurch wird verhindert, dass ein Client mehrere ausstehende Aufrufe hat, während sein Thread weiterhin für andere Aufgaben verfügbar ist.
  • Langsame oder verzögerte Clients. Ein Client, der Daten nur langsam erzeugt, möchte möglicherweise einen Remoteprozeduraufruf mit anfänglichen Daten ausführen und dann bei der Erstellung zusätzliche Daten bereitstellen. Dies ist mit herkömmlichem (synchronem) RPC nicht möglich.
  • Langsame oder verzögerte Server. Ein Remoteprozeduraufruf, der lange dauert, bindet den Dispatchthread für die Dauer der Aufgabe. Bei asynchronem RPC kann der Server einen separaten (asynchronen) Vorgang starten, um die Anforderung zu verarbeiten und die Antwort zurückzusenden, wenn sie verfügbar ist. Der Server kann die Antwort auch inkrementell senden, wenn ergebnisse verfügbar werden, ohne einen Dispatchthread für die Dauer des Remoteaufrufs binden zu müssen. Indem Sie die Clientanwendung asynchron machen, können Sie verhindern, dass ein langsamer Server eine Clientanwendung unnötig bindet.
  • Übertragung großer Datenmengen. Die Übertragung großer Datenmengen zwischen Client und Server, insbesondere bei langsamen Verbindungen, bindet sowohl den Clientthread als auch den Server-Manager-Thread für die Dauer der Übertragung. Bei asynchronen RPC- und Pipes kann die Datenübertragung inkrementell erfolgen, ohne den Client oder Server daran zu hindern, andere Aufgaben auszuführen.

Sie nutzen asynchrone RPC-Mechanismen, indem Sie Funktionen mit dem Attribut [async] deklarieren. Da Sie diese Deklaration in einer Attributkonfigurationsdatei (ACF) vornehmen, müssen Sie keine Änderungen an der IDL-Datei (Interface Definition Language) vornehmen. asynchroner RPC hat keine Auswirkungen auf das Drahtprotokoll (wie die Daten zwischen Client und Server übertragen werden). Dies bedeutet, dass sowohl synchrone als auch asynchrone Clients mit einer asynchronen Serveranwendung kommunizieren können.

In diesem Abschnitt wird eine Übersicht über die Entwicklung verteilter Anwendungen mit asynchronem RPC vorgestellt. Die Übersicht wird in den folgenden Abschnitten dargestellt: