ProxyAttribute-Klasse
Gibt an, dass für einen Objekttyp ein benutzerdefinierten Proxy erforderlich ist.
Namespace: System.Runtime.Remoting.Proxies
Assembly: mscorlib (in mscorlib.dll)
Syntax
'Declaration
<ComVisibleAttribute(True)> _
<AttributeUsageAttribute(AttributeTargets.Class, AllowMultiple:=False, Inherited:=True)> _
Public Class ProxyAttribute
Inherits Attribute
Implements IContextAttribute
'Usage
Dim instance As ProxyAttribute
[ComVisibleAttribute(true)]
[AttributeUsageAttribute(AttributeTargets.Class, AllowMultiple=false, Inherited=true)]
public class ProxyAttribute : Attribute, IContextAttribute
[ComVisibleAttribute(true)]
[AttributeUsageAttribute(AttributeTargets::Class, AllowMultiple=false, Inherited=true)]
public ref class ProxyAttribute : public Attribute, IContextAttribute
/** @attribute ComVisibleAttribute(true) */
/** @attribute AttributeUsageAttribute(AttributeTargets.Class, AllowMultiple=false, Inherited=true) */
public class ProxyAttribute extends Attribute implements IContextAttribute
ComVisibleAttribute(true)
AttributeUsageAttribute(AttributeTargets.Class, AllowMultiple=false, Inherited=true)
public class ProxyAttribute extends Attribute implements IContextAttribute
Hinweise
Wenden Sie das aktuelle Attribut auf Typen an, die benutzerdefinierte Proxys benötigen. Sie können mit der ProxyAttribute-Klasse durch Ableitung vom ProxyAttribute und Platzieren des Attributs auf einem untergeordneten Element von ContextBoundObject die new-Anweisung (New in Visual Basic) abfangen. (Das Platzieren des Proxyattributs auf einem untergeordneten Element von MarshalByRefObject wird nicht unterstützt.)
Hinweis
Diese Klasse führt einen Verknüpfungsaufruf und eine Vererbungsforderung auf der Klassenebene aus. Wenn der direkte Aufrufer bzw. die abgeleitete Klasse nicht über die Berechtigung für die Infrastruktur verfügen, wird eine SecurityException ausgelöst. Ausführliche Informationen über Sicherheitsforderungen finden Sie unter Verknüpfungsaufrufe und Vererbungsforderungen.
Beispiel
<SecurityPermissionAttribute(SecurityAction.Demand, Flags := SecurityPermissionFlag.Infrastructure), _
AttributeUsage(AttributeTargets.Class)> _
Public Class MyProxyAttribute
Inherits ProxyAttribute
Public Sub New()
End Sub 'New
' Create an instance of ServicedComponentProxy
Public Overrides Function CreateInstance(serverType As Type) As MarshalByRefObject
Return MyBase.CreateInstance(serverType)
End Function 'CreateInstance
Public Overrides Function CreateProxy(objRef1 As ObjRef, serverType As Type, _
serverObject As Object, serverContext As Context) As RealProxy
Dim myCustomProxy As New MyProxy(serverType)
If Not (serverContext Is Nothing) Then
RealProxy.SetStubData(myCustomProxy, serverContext)
End If
If Not serverType.IsMarshalByRef And serverContext Is Nothing Then
Throw New RemotingException("Bad Type for CreateProxy")
End If
Return myCustomProxy
End Function 'CreateProxy
End Class 'MyProxyAttribute
<MyProxyAttribute()> _
Public Class CustomServer
Inherits ContextBoundObject
Public Sub New()
Console.WriteLine("CustomServer Base Class constructor called")
End Sub 'New
Public Sub HelloMethod(str As String)
Console.WriteLine("HelloMethod of Server is invoked with message : " + str)
End Sub 'HelloMethod
End Class 'CustomServer
[AttributeUsage(AttributeTargets.Class)]
[SecurityPermissionAttribute(SecurityAction.Demand, Flags=SecurityPermissionFlag.Infrastructure)]
public class MyProxyAttribute : ProxyAttribute
{
public MyProxyAttribute()
{
}
// Create an instance of ServicedComponentProxy
public override MarshalByRefObject CreateInstance(Type serverType)
{
return base.CreateInstance(serverType);
}
public override RealProxy CreateProxy(ObjRef objRef1,
Type serverType,
object serverObject,
Context serverContext)
{
MyProxy myCustomProxy = new MyProxy(serverType);
if(serverContext != null)
{
RealProxy.SetStubData(myCustomProxy,serverContext);
}
if((!serverType.IsMarshalByRef)&&(serverContext == null))
{
throw new RemotingException("Bad Type for CreateProxy");
}
return myCustomProxy;
}
}
[PermissionSet(SecurityAction.Demand, Name="FullTrust")]
[MyProxyAttribute]
public class CustomServer :ContextBoundObject
{
public CustomServer()
{
Console.WriteLine("CustomServer Base Class constructor called");
}
public void HelloMethod(string str)
{
Console.WriteLine("HelloMethod of Server is invoked with message : " + str);
}
}
[AttributeUsageAttribute(AttributeTargets::Class)]
[System::Security::Permissions::SecurityPermissionAttribute
(System::Security::Permissions::SecurityAction::LinkDemand,
Flags=System::Security::Permissions::SecurityPermissionFlag::Infrastructure)]
[System::Security::Permissions::SecurityPermissionAttribute
(System::Security::Permissions::SecurityAction::InheritanceDemand,
Flags=System::Security::Permissions::SecurityPermissionFlag::Infrastructure)]
public ref class MyProxyAttribute: public ProxyAttribute
{
public:
MyProxyAttribute(){}
// Create an instance of ServicedComponentProxy
virtual MarshalByRefObject^ CreateInstance( Type^ serverType ) override
{
return ProxyAttribute::CreateInstance( serverType );
}
virtual RealProxy^ CreateProxy( ObjRef^ objRef1, Type^ serverType, Object^ serverObject, Context^ serverContext ) override
{
MyProxy^ myCustomProxy = gcnew MyProxy( serverType );
if ( serverContext != nullptr )
{
RealProxy::SetStubData( myCustomProxy, serverContext );
}
if ( ( !serverType->IsMarshalByRef) && (serverContext == nullptr) )
{
throw gcnew RemotingException( "Bad Type for CreateProxy" );
}
return myCustomProxy;
}
};
[MyProxyAttribute]
ref class CustomServer: public ContextBoundObject
{
public:
CustomServer()
{
Console::WriteLine( "CustomServer Base Class constructor called" );
}
void HelloMethod( String^ str )
{
Console::WriteLine( "HelloMethod of Server is invoked with message : {0}", str );
}
};
.NET Framework-Sicherheit
- SecurityPermission für die Verwendung von Infrastrukturcode. Anforderungswert: SecurityAction.LinkDemand; Berechtigungswert: SecurityPermissionFlag.Infrastructure
- SecurityPermission für die Verwendung von Infrastrukturcode. Anforderungswert: SecurityAction.InheritanceDemand; Berechtigungswert: SecurityPermissionFlag.Infrastructure
Vererbungshierarchie
System.Object
System.Attribute
System.Runtime.Remoting.Proxies.ProxyAttribute
Threadsicherheit
Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.
Plattformen
Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.
Versionsinformationen
.NET Framework
Unterstützt in: 2.0, 1.1, 1.0
Siehe auch
Referenz
ProxyAttribute-Member
System.Runtime.Remoting.Proxies-Namespace
RealProxy