Freigeben über


Proxy

Ein Proxy befindet sich im Adressraum des aufrufenden Prozesses und fungiert als Ersatz für das Remoteobjekt. Aus sicht des aufrufenden Objekts ist der Proxy das Objekt. In der Regel besteht die Rolle des Proxys darin, die Schnittstellenparameter für Aufrufe von Methoden in den Objektschnittstellen zu packen. Der Proxy verpackt die Parameter in einen Nachrichtenpuffer und übergibt den Puffer an den Kanal, der den Transport zwischen Prozessen übernimmt. Der Proxy wird als aggregiertes oder zusammengesetztes Objekt implementiert. Es enthält eine vom System bereitgestellte Manager-Komponente namens Proxy-Manager und eine oder mehrere schnittstellenspezifische Komponenten, die als Schnittstellenproxys bezeichnet werden. Die Anzahl der Schnittstellenproxys entspricht der Anzahl von Objektschnittstellen, die für diesen bestimmten Client verfügbar gemacht wurden. Damit der Client dem Komponentenobjektmodell entspricht, scheint der Proxy das reale Objekt zu sein.

Hinweis

Beim benutzerdefinierten Marshalling kann der Proxy ähnlich implementiert werden oder direkt mit dem Objekt kommunizieren, ohne einen Stub zu verwenden.

 

Jeder Schnittstellenproxy ist ein Komponentenobjekt, das den Marshallcode für eine der Schnittstellen des Objekts implementiert. Der Proxy stellt das Objekt dar, für das er Marshallcode bereitstellt. Jeder Proxy implementiert auch die IRpcProxyBuffer-Schnittstelle . Obwohl die vom Proxy dargestellte Objektschnittstelle öffentlich ist, ist die IRpcProxyBuffer-Implementierung privat und wird intern innerhalb des Proxys verwendet. Der Proxy-Manager verfolgt die Schnittstellenproxys und enthält auch die öffentliche Implementierung der steuernden IUnknown-Schnittstelle für das Aggregat. Jeder Schnittstellenproxy kann in einer separaten DLL vorhanden sein, die geladen wird, wenn die unterstützte Schnittstelle für den Client materialisiert wird.

Struktur des Proxys

Das folgende Diagramm zeigt die Struktur eines Proxys, der das Standard-Marshalling von Parametern unterstützt, die zu zwei Schnittstellen gehören: IA1 und IA2. Jeder Schnittstellenproxy implementiert IRpcProxyBuffer für die interne Kommunikation zwischen den Aggregatteilen. Wenn der Proxy bereit ist, seine gemarselten Parameter über die Prozessgrenze zu übergeben, ruft er Methoden in der IRpcChannelBuffer-Schnittstelle auf, die vom Kanal implementiert wird. Der Kanal in leitet den Aufruf wiederum an die RPC-Laufzeitbibliothek weiter, damit er sein Ziel im -Objekt erreichen kann.

Diagramm, das die Struktur des Proxys zeigt.

Kanal

Objektübergreifende Kommunikation

Marshalldetails

Microsoft RPC

Stub