RealProxy Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Stellt Basisfunktionen für Proxys bereit.
public ref class RealProxy abstract
public abstract class RealProxy
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class RealProxy
[System.Runtime.InteropServices.ComVisible(true)]
[System.Security.SecurityCritical]
public abstract class RealProxy
type RealProxy = class
[<System.Runtime.InteropServices.ComVisible(true)>]
type RealProxy = class
[<System.Runtime.InteropServices.ComVisible(true)>]
[<System.Security.SecurityCritical>]
type RealProxy = class
Public MustInherit Class RealProxy
- Vererbung
-
RealProxy
- Attribute
Beispiele
// Create a custom 'RealProxy'.
public ref class MyProxy: public RealProxy
{
private:
String^ myURIString;
MarshalByRefObject^ myMarshalByRefObject;
public:
MyProxy( Type^ myType )
: RealProxy( myType )
{
// RealProxy uses the Type to generate a transparent proxy.
myMarshalByRefObject = dynamic_cast<MarshalByRefObject^>(Activator::CreateInstance(myType));
// Get 'ObjRef', for transmission serialization between application domains.
ObjRef^ myObjRef = RemotingServices::Marshal( myMarshalByRefObject );
// Get the 'URI' property of 'ObjRef' and store it.
myURIString = myObjRef->URI;
Console::WriteLine( "URI :{0}", myObjRef->URI );
}
virtual IMessage^ Invoke ( IMessage^ myIMessage ) override
{
Console::WriteLine( "MyProxy.Invoke Start" );
Console::WriteLine( "" );
if ( dynamic_cast<IMethodCallMessage^>(myIMessage) )
Console::WriteLine( "IMethodCallMessage" );
if ( dynamic_cast<IMethodReturnMessage^>(myIMessage) )
Console::WriteLine( "IMethodReturnMessage" );
Type^ msgType = myIMessage->GetType();
Console::WriteLine( "Message Type: {0}", msgType );
Console::WriteLine( "Message Properties" );
IDictionary^ myIDictionary = myIMessage->Properties;
// Set the '__Uri' property of 'IMessage' to 'URI' property of 'ObjRef'.
myIDictionary->default[ "__Uri" ] = myURIString;
IDictionaryEnumerator^ myIDictionaryEnumerator = dynamic_cast<IDictionaryEnumerator^>(myIDictionary->GetEnumerator());
while ( myIDictionaryEnumerator->MoveNext() )
{
Object^ myKey = myIDictionaryEnumerator->Key;
String^ myKeyName = myKey->ToString();
Object^ myValue = myIDictionaryEnumerator->Value;
Console::WriteLine( "\t{0} : {1}", myKeyName, myIDictionaryEnumerator->Value );
if ( myKeyName->Equals( "__Args" ) )
{
array<Object^>^myObjectArray = (array<Object^>^)myValue;
for ( int aIndex = 0; aIndex < myObjectArray->Length; aIndex++ )
Console::WriteLine( "\t\targ: {0} myValue: {1}", aIndex, myObjectArray[ aIndex ] );
}
if ( (myKeyName->Equals( "__MethodSignature" )) && (nullptr != myValue) )
{
array<Object^>^myObjectArray = (array<Object^>^)myValue;
for ( int aIndex = 0; aIndex < myObjectArray->Length; aIndex++ )
Console::WriteLine( "\t\targ: {0} myValue: {1}", aIndex, myObjectArray[ aIndex ] );
}
}
IMessage^ myReturnMessage;
myIDictionary->default[ "__Uri" ] = myURIString;
Console::WriteLine( "__Uri {0}", myIDictionary->default[ "__Uri" ] );
Console::WriteLine( "ChannelServices.SyncDispatchMessage" );
myReturnMessage = ChannelServices::SyncDispatchMessage( myIMessage );
// Push return value and OUT parameters back onto stack.
IMethodReturnMessage^ myMethodReturnMessage = dynamic_cast<IMethodReturnMessage^>(myReturnMessage);
Console::WriteLine( "IMethodReturnMessage.ReturnValue: {0}", myMethodReturnMessage->ReturnValue );
Console::WriteLine( "MyProxy.Invoke - Finish" );
return myReturnMessage;
}
};
// Create a custom 'RealProxy'.
public class MyProxy : RealProxy
{
String myURIString;
MarshalByRefObject myMarshalByRefObject;
public MyProxy(Type myType) : base(myType)
{
// RealProxy uses the Type to generate a transparent proxy.
myMarshalByRefObject = (MarshalByRefObject)Activator.CreateInstance((myType));
// Get 'ObjRef', for transmission serialization between application domains.
ObjRef myObjRef = RemotingServices.Marshal(myMarshalByRefObject);
// Get the 'URI' property of 'ObjRef' and store it.
myURIString = myObjRef.URI;
Console.WriteLine("URI :{0}", myObjRef.URI);
}
public override IMessage Invoke(IMessage myIMessage)
{
Console.WriteLine("MyProxy.Invoke Start");
Console.WriteLine("");
if (myIMessage is IMethodCallMessage)
Console.WriteLine("IMethodCallMessage");
if (myIMessage is IMethodReturnMessage)
Console.WriteLine("IMethodReturnMessage");
Type msgType = myIMessage.GetType();
Console.WriteLine("Message Type: {0}", msgType.ToString());
Console.WriteLine("Message Properties");
IDictionary myIDictionary = myIMessage.Properties;
// Set the '__Uri' property of 'IMessage' to 'URI' property of 'ObjRef'.
myIDictionary["__Uri"] = myURIString;
IDictionaryEnumerator myIDictionaryEnumerator =
(IDictionaryEnumerator) myIDictionary.GetEnumerator();
while (myIDictionaryEnumerator.MoveNext())
{
Object myKey = myIDictionaryEnumerator.Key;
String myKeyName = myKey.ToString();
Object myValue = myIDictionaryEnumerator.Value;
Console.WriteLine("\t{0} : {1}", myKeyName,
myIDictionaryEnumerator.Value);
if (myKeyName == "__Args")
{
Object[] myObjectArray = (Object[])myValue;
for (int aIndex = 0; aIndex < myObjectArray.Length; aIndex++)
Console.WriteLine("\t\targ: {0} myValue: {1}", aIndex,
myObjectArray[aIndex]);
}
if ((myKeyName == "__MethodSignature") && (null != myValue))
{
Object[] myObjectArray = (Object[])myValue;
for (int aIndex = 0; aIndex < myObjectArray.Length; aIndex++)
Console.WriteLine("\t\targ: {0} myValue: {1}", aIndex,
myObjectArray[aIndex]);
}
}
IMessage myReturnMessage;
myIDictionary["__Uri"] = myURIString;
Console.WriteLine("__Uri {0}", myIDictionary["__Uri"]);
Console.WriteLine("ChannelServices.SyncDispatchMessage");
myReturnMessage = ChannelServices.SyncDispatchMessage(myIMessage);
// Push return value and OUT parameters back onto stack.
IMethodReturnMessage myMethodReturnMessage = (IMethodReturnMessage)
myReturnMessage;
Console.WriteLine("IMethodReturnMessage.ReturnValue: {0}",
myMethodReturnMessage.ReturnValue);
Console.WriteLine("MyProxy.Invoke - Finish");
return myReturnMessage;
}
}
' Create a custom 'RealProxy'.
Public Class MyProxy
Inherits RealProxy
Private myURIString As String
Private myMarshalByRefObject As MarshalByRefObject
<PermissionSet(SecurityAction.LinkDemand)> _
Public Sub New(ByVal myType As Type)
MyBase.New(myType)
' RealProxy uses the Type to generate a transparent proxy.
myMarshalByRefObject = CType(Activator.CreateInstance(myType), MarshalByRefObject)
' Get 'ObjRef', for transmission serialization between application domains.
Dim myObjRef As ObjRef = RemotingServices.Marshal(myMarshalByRefObject)
' Get the 'URI' property of 'ObjRef' and store it.
myURIString = myObjRef.URI
Console.WriteLine("URI :{0}", myObjRef.URI)
End Sub
<SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags:=SecurityPermissionFlag.Infrastructure)> _
Public Overrides Function Invoke(ByVal myIMessage As IMessage) As IMessage
Console.WriteLine("MyProxy.Invoke Start")
Console.WriteLine("")
If TypeOf myIMessage Is IMethodCallMessage Then
Console.WriteLine("IMethodCallMessage")
End If
If TypeOf myIMessage Is IMethodReturnMessage Then
Console.WriteLine("IMethodReturnMessage")
End If
Dim msgType As Type
msgType = CObj(myIMessage).GetType
Console.WriteLine("Message Type: {0}", msgType.ToString())
Console.WriteLine("Message Properties")
Dim myIDictionary As IDictionary = myIMessage.Properties
' Set the '__Uri' property of 'IMessage' to 'URI' property of 'ObjRef'.
myIDictionary("__Uri") = myURIString
Dim myIDictionaryEnumerator As IDictionaryEnumerator = CType(myIDictionary.GetEnumerator(), _
IDictionaryEnumerator)
While myIDictionaryEnumerator.MoveNext()
Dim myKey As Object = myIDictionaryEnumerator.Key
Dim myKeyName As String = myKey.ToString()
Dim myValue As Object = myIDictionaryEnumerator.Value
Console.WriteLine(ControlChars.Tab + "{0} : {1}", myKeyName, myIDictionaryEnumerator.Value)
If myKeyName = "__Args" Then
Dim myObjectArray As Object() = CType(myValue, Object())
Dim aIndex As Integer
For aIndex = 0 To myObjectArray.Length - 1
Console.WriteLine(ControlChars.Tab + ControlChars.Tab + "arg: {0} myValue: {1}", _
aIndex, myObjectArray(aIndex))
Next aIndex
End If
If myKeyName = "__MethodSignature" And Not Nothing Is myValue Then
Dim myObjectArray As Object() = CType(myValue, Object())
Dim aIndex As Integer
For aIndex = 0 To myObjectArray.Length - 1
Console.WriteLine(ControlChars.Tab + ControlChars.Tab + "arg: {0} myValue: {1}", _
aIndex, myObjectArray(aIndex))
Next aIndex
End If
End While
Dim myReturnMessage As IMessage
myIDictionary("__Uri") = myURIString
Console.WriteLine("__Uri {0}", myIDictionary("__Uri"))
Console.WriteLine("ChannelServices.SyncDispatchMessage")
myReturnMessage = ChannelServices.SyncDispatchMessage(CObj(myIMessage))
' Push return value and OUT parameters back onto stack.
Dim myMethodReturnMessage As IMethodReturnMessage = CType(myReturnMessage, IMethodReturnMessage)
Console.WriteLine("IMethodReturnMessage.ReturnValue: {0}", myMethodReturnMessage.ReturnValue)
Console.WriteLine("MyProxy.Invoke - Finish")
Return myReturnMessage
End Function 'Invoke
End Class
Hinweise
Die RealProxy Klasse ist die Basisklasse, von der abstract Proxys abgeleitet werden müssen.
Ein Client, der ein Objekt über jede Art einer Remotinggrenze verwendet, verwendet tatsächlich einen transparenten Proxy für das Objekt. Der transparente Proxy bietet die Illusion, dass sich das tatsächliche Objekt im Clientbereich befindet. Dies wird erreicht, indem Aufrufe an das eigentliche Objekt weitergeleitet werden, indem die Remotinginfrastruktur verwendet wird.
Der transparente Proxy befindet sich selbst in einer Instanz einer verwalteten Laufzeitklasse vom Typ RealProxy. Die RealProxy Implementierung eines Teils der Funktionalität, die erforderlich ist, um die Vorgänge vom transparenten Proxy weiterzuleiten. Beachten Sie, dass ein Proxyobjekt die zugeordnete Semantik von verwalteten Objekten erbt, z. B. Garbage Collection, Unterstützung für Felder und Methoden, und kann auf neue Klassen erweitert werden. Der Proxy hat eine duale Natur: Er fungiert als Objekt derselben Klasse wie das Remoteobjekt (transparenter Proxy), und es handelt sich um ein verwaltetes Objekt selbst.
Ein Proxyobjekt kann ohne Rücksicht auf Remotingunterteilungen innerhalb einer AppDomain.
Hinweis
Diese Klasse macht eine Verknüpfungsnachfrage und eine Vererbungsnachfrage auf Klassenebene. Ein SecurityException Fehler wird ausgelöst, wenn entweder der direkte Aufrufer oder die abgeleitete Klasse keine Infrastrukturberechtigung besitzt. Ausführliche Informationen zu Sicherheitsanforderungen finden Sie unter Linkanforderungen.
Hinweise für Ausführende
Wenn Sie von RealProxyerben, müssen Sie die Invoke(IMessage) Methode überschreiben.
Konstruktoren
| Name | Beschreibung |
|---|---|
| RealProxy() |
Initialisiert eine neue Instanz der RealProxy Klasse mit Standardwerten. |
| RealProxy(Type, IntPtr, Object) |
Initialisiert eine neue Instanz der RealProxy-Klasse. |
| RealProxy(Type) |
Initialisiert eine neue Instanz der RealProxy Klasse, die ein Remoteobjekt des angegebenen darstellt Type. |
Methoden
| Name | Beschreibung |
|---|---|
| AttachServer(MarshalByRefObject) |
Fügt die aktuelle Proxyinstanz an die angegebene Remoteinstanz MarshalByRefObjectan. |
| CreateObjRef(Type) |
Erstellt einen ObjRef für den angegebenen Objekttyp und registriert ihn bei der Remotinginfrastruktur als clientaktives Objekt. |
| DetachServer() |
Trennt die aktuelle Proxyinstanz vom Remoteserverobjekt, das es darstellt. |
| Equals(Object) |
Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist. (Geerbt von Object) |
| GetCOMIUnknown(Boolean) |
Fordert einen nicht verwalteten Verweis auf das Objekt an, das von der aktuellen Proxyinstanz dargestellt wird. |
| GetHashCode() |
Dient als die Standard-Hashfunktion (Geerbt von Object) |
| GetObjectData(SerializationInfo, StreamingContext) |
Fügt den transparenten Proxy des Objekts hinzu, das durch die aktuelle Instanz des RealProxy angegebenen Objekts SerializationInfodargestellt wird. |
| GetProxiedType() |
Gibt das Type Objekt zurück, das die aktuelle Instanz darstellt RealProxy . |
| GetStubData(RealProxy) |
Ruft Stubdaten ab, die für den angegebenen Proxy gespeichert sind. |
| GetTransparentProxy() |
Gibt den transparenten Proxy für die aktuelle Instanz von RealProxy. |
| GetType() |
Ruft die Type der aktuellen Instanz ab. (Geerbt von Object) |
| GetUnwrappedServer() |
Gibt das Serverobjekt zurück, das durch die aktuelle Proxyinstanz dargestellt wird. |
| InitializeServerObject(IConstructionCallMessage) |
Initialisiert eine neue Instanz des Objekts Type des Remoteobjekts, das die aktuelle Instanz von RealProxy represents with the specified IConstructionCallMessage. |
| Invoke(IMessage) |
Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird die Methode aufgerufen, die im bereitgestellten IMessage Remoteobjekt angegeben ist, das von der aktuellen Instanz dargestellt wird. |
| MemberwiseClone() |
Erstellt eine flache Kopie der aktuellen Object. (Geerbt von Object) |
| SetCOMIUnknown(IntPtr) |
Speichert einen nicht verwalteten Proxy des Objekts, das durch die aktuelle Instanz dargestellt wird. |
| SetStubData(RealProxy, Object) |
Legt die Stubdaten für den angegebenen Proxy fest. |
| SupportsInterface(Guid) |
Fordert eine COM-Schnittstelle mit der angegebenen ID an. |
| ToString() |
Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Geerbt von Object) |