Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Das Erweitern des Proxys kann nützlich sein, um die Teilnahme an Proxyerstellung, Marshalling, Objektidentität usw. zu ermöglichen. Sie können mit Hilfe der erweiterbaren RealProxy-Klasse einen eigenen Proxy erstellen. Zu diesem Zweck müssen Sie eine Klasse von der RealProxy-Klasse ableiten und die RealProxy.Invoke-Methode überschreiben. Die Anweisung new (New in Visual Basic) kann durch Ableiten vom ProxyAttribute-Attribut und Anwenden des Attributs auf ein untergeordnetes Element von ContextBoundObject abgefangen werden. (Das Anwenden des Proxyattributs auf ein untergeordnetes Element von MarshalByRefObject wird nicht unterstützt.) Beim Aufruf von new erstellt das abgeleitete ProxyAttribute eine Instanz des benutzerdefinierten Proxys. Darüber hinaus kann eine Anwendung auch direkt eine benutzerdefinierte Proxyinstanz erstellen.
Wenn der Anwendungscode eine Methode für einen benutzerdefinierten Proxy aufruft, wird die überschriebene RealProxy.Invoke-Methode mit einem Objekt aufgerufen, das IMessage implementiert. Die IMessage-Implementierung stellt eine IDictionary-Implementierung bereit, die wiederum Name/Wert-Paare mit Informationen über die Methode bereitstellt. Weitere Informationen zu bestimmten Einträgen im Wörterbuch finden Sie in der Referenzdokumentation für die IMessage-Schnittstelle und verwandte Schnittstellen (IMethodCallMessage und IMethodReturnMessage).
Ein echtes Objekt kann von der überschriebenen Invoke-Methode durch einen Aufruf von RemotingServices.ExecuteMessage aufgerufen werden, wodurch der Aufruf an das echte Objekt gesendet wird.
Sie können auch die EnterpriseServicesHelper.CreateConstructionReturnMessage-Methode verwenden, um eine IConstructionCallMessage-Implementierung zu verarbeiten und eine IConstructionReturnMessage-Implementierung zu erzeugen. Sie können das Sicherungsobjekt auch mit Hilfe der RealProxy.InitializeServerObject-Methode erstellen.
Bei Verwendung des abgeleiteten ProxyAttribute können Sie ein echtes Objekt in der überschriebenen ProxyAttribute.CreateInstance-Methode erstellen und es als Feld im benutzerdefinierten Proxy speichern. Der benutzerdefinierte Proxy kann das echte Objekt marshallen, um das ObjRef-Objekt mit dem URI (Uniform Resource Identifier) abzurufen. Der URI muss im Proxy gespeichert werden, da der "__Uri"-Eintrag in der von der IMessage.Properties-Eigenschaft zurückgegebenen Auflistung in der IMessage-Implementierung festgelegt werden muss, um einen Aufruf an ein echtes Objekt zu senden.
Natürlich muss die Nachricht nicht für ein echtes Objekt gesendet werden. Sie können damit einige Aufgaben in Invoke ausführen und ein Objekt erzeugen und zurückgeben, das die IMethodReturnMessage-Schnittstelle implementiert.
Für die Teilnahme am Marshalling überschreiben Sie RealProxy.CreateObjRef und stellen ein benutzerdefiniertes ObjRef bereit, der ObjRef erweitert. Wenn Sie dem benutzerdefinierten ObjRef benutzerdefinierte Daten hinzufügen möchten, überschreiben Sie GetObjectData. Sie fügen der ObjRef.GetObjectData-Methode benutzerdefinierte Daten und einen Delegaten hinzu, um die Objektidentitätsfunktionen des .NET Remoting-Marshallingsystems zu ändern.
Während der Deserialisierung ruft das Remotingsystem das überschriebene IObjectReference.GetRealObject für das benutzerdefinierte ObjRef auf. Hier sollten Sie an die ObjRef.GetRealObject-Basismethode delegieren, da die Basis die Objektidentität behandelt und Remotechannels einrichtet. Die Basis ruft auch die überschriebene ProxyAttribute.CreateProxy-Methode auf, damit Sie den benutzerdefinierten Proxy einrichten können.
Mit ObjRef.IsFromThisAppDomain und ObjRef.IsFromThisProcess kann bestimmt werden, wie das Marshalling rückgängig gemacht werden soll.
Beachten Sie Folgendes: Wenn Sie während des Marshallingvorgangs keinen benutzerdefinierten ObjRef bereitstellen, marshallt das Remotingsystem das Objekt automatisch und macht das Marshallen automatisch rückgängig, und der benutzerdefinierte Proxy wird in der Anwendungsdomäne des Aufrufers nicht verwendet.
Siehe auch
Erweitertes Remoting | RealProxy | ProxyAttribute | RemotingServices | IMessage | IMethodReturnMessage | IMethodCallMessage