Proxy

Ein Proxy befindet sich im Adressraum des aufrufenden Prozesses und fungiert als Ersatz für das Remoteobjekt. Aus Der Perspektive 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 seinen Objektschnittstellen zu packen. Der Proxy packt die Parameter in einen Nachrichtenpuffer und übergibt den Puffer an den Kanal, der den Transport zwischen Prozessen verarbeitet. Der Proxy wird als Aggregatobjekt oder zusammengesetztes Objekt implementiert. Sie enthält ein vom System bereitgestelltes Manager-Element namens Proxy-Manager und eine oder mehrere schnittstellenspezifische Komponenten, die als Schnittstellenproxys bezeichnet werden. Die Anzahl der Schnittstellenproxys entspricht der Anzahl der Objektschnittstellen, die für diesen bestimmten Client verfügbar gemacht wurden. Für den Client, der das Komponentenobjektmodell erfüllt, scheint der Proxy das echte Objekt zu sein.

Hinweis

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

Jeder Schnittstellenproxy ist ein Komponentenobjekt, das den Marshallingcode für eine der Schnittstellen des Objekts implementiert. Der Proxy stellt das Objekt dar, für das er Marshallingcode 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 von ihm unterstützte Schnittstelle für den Client materialisiert wird.

Struktur des Proxys

Das folgende Diagramm zeigt die Struktur eines Proxys, der das standardmäßige 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 gemarshallten Parameter über die Prozessgrenze zu übergeben, ruft er Methoden in der IRpcChannelBuffer-Schnittstelle auf, die vom Kanal implementiert wird. Der Kanal leitet wiederum den Aufruf der RPC-Laufzeitbibliothek weiter, damit sie ihr Ziel im -Objekt erreichen kann.

Diagramm, das die Struktur des Proxys zeigt.

Kanal

Objektübergreifende Kommunikation

Marshallingdetails

Microsoft RPC

Stub