IMethodMessage.LogicalCallContext-Eigenschaft
Ruft den LogicalCallContext für den aktuellen Methodenaufruf ab.
Namespace: System.Runtime.Remoting.Messaging
Assembly: mscorlib (in mscorlib.dll)
Syntax
'Declaration
ReadOnly Property LogicalCallContext As LogicalCallContext
'Usage
Dim instance As IMethodMessage
Dim value As LogicalCallContext
value = instance.LogicalCallContext
LogicalCallContext LogicalCallContext { get; }
property LogicalCallContext^ LogicalCallContext {
LogicalCallContext^ get ();
}
/** @property */
LogicalCallContext get_LogicalCallContext ()
function get LogicalCallContext () : LogicalCallContext
Eigenschaftenwert
Ruft den LogicalCallContext für den aktuellen Methodenaufruf ab.
Ausnahmen
Ausnahmetyp | Bedingung |
---|---|
Der direkte Aufrufer führt den Aufruf über einen Verweis auf die Schnittstelle aus und verfügt nicht über die Berechtigung für die Infrastruktur. |
Beispiel
Der folgende Beispielcode veranschaulicht, wie mithilfe der LogicalCallContext-Eigenschaft bestimmt wird, ob Werte an den logischen Thread angefügt sind.
Public Class MyProxy
Inherits RealProxy
Private stringUri As String
Private targetObject As MarshalByRefObject
<SecurityPermission(SecurityAction.LinkDemand)> _
Public Sub New(type As Type)
MyBase.New(type)
targetObject = CType(Activator.CreateInstance(type), MarshalByRefObject)
Dim myObject As ObjRef = RemotingServices.Marshal(targetObject)
stringUri = myObject.URI
End Sub 'New
<SecurityPermission(SecurityAction.LinkDemand)> _
Public Sub New(type As Type, targetObject As MarshalByRefObject)
MyBase.New(type)
Me.targetObject = targetObject
End Sub 'New
<SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags:=SecurityPermissionFlag.Infrastructure)> _
Public Overrides Function Invoke(message As IMessage) As IMessage
message.Properties("__Uri") = stringUri
Dim myMethodMessage As IMethodMessage = _
CType(ChannelServices.SyncDispatchMessage(message), IMethodMessage)
Console.WriteLine("---------IMethodMessage example-------")
Console.WriteLine("Method name : " + myMethodMessage.MethodName)
Console.WriteLine("LogicalCallContext has information : " + _
myMethodMessage.LogicalCallContext.HasInfo.ToString())
Console.WriteLine("Uri : " + myMethodMessage.Uri)
Return myMethodMessage
End Function 'Invoke
End Class 'MyProxy
public class MyProxy : RealProxy
{
String stringUri;
MarshalByRefObject targetObject;
[SecurityPermission(SecurityAction.LinkDemand)]
public MyProxy(Type type) : base(type)
{
targetObject = (MarshalByRefObject)Activator.CreateInstance(type);
ObjRef myObject = RemotingServices.Marshal(targetObject);
stringUri = myObject.URI;
}
[SecurityPermission(SecurityAction.LinkDemand)]
public MyProxy(Type type, MarshalByRefObject targetObject) : base(type)
{
this.targetObject = targetObject;
}
[SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.Infrastructure)]
public override IMessage Invoke(IMessage message)
{
message.Properties["__Uri"] = stringUri;
IMethodMessage myMethodMessage =
(IMethodMessage)ChannelServices.SyncDispatchMessage(message);
Console.WriteLine("---------IMethodMessage example-------");
Console.WriteLine("Method name : " + myMethodMessage.MethodName);
Console.WriteLine("LogicalCallContext has information : " +
myMethodMessage.LogicalCallContext.HasInfo);
Console.WriteLine("Uri : " + myMethodMessage.Uri);
return myMethodMessage;
}
}
//This sample requires full trust
[PermissionSetAttribute(SecurityAction::Demand, Name = "FullTrust")]
public ref class MyProxy: public RealProxy
{
private:
String^ stringUri;
MarshalByRefObject^ targetObject;
public:
MyProxy( Type^ type )
: RealProxy( type )
{
targetObject = dynamic_cast<MarshalByRefObject^>(Activator::CreateInstance( type ));
ObjRef^ myObject = RemotingServices::Marshal( targetObject );
stringUri = myObject->URI;
}
MyProxy( Type^ type, MarshalByRefObject^ targetObject )
: RealProxy( type )
{
this->targetObject = targetObject;
}
virtual IMessage^ Invoke( IMessage^ message ) override
{
message->Properties[ "__Uri" ] = stringUri;
IMethodMessage^ myMethodMessage = dynamic_cast<IMethodMessage^>(ChannelServices::SyncDispatchMessage( message ));
Console::WriteLine( "---------IMethodMessage* example-------" );
Console::WriteLine( "Method name : {0}", myMethodMessage->MethodName );
Console::WriteLine( "LogicalCallContext has information : {0}", myMethodMessage->LogicalCallContext->HasInfo );
Console::WriteLine( "Uri : {0}", myMethodMessage->Uri );
return myMethodMessage;
}
};
/** @attribute SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.Infrastructure)public class MyProxyAttribute extends ProxyAttribute
*/
public class MyProxy extends RealProxy
{
private String stringUri;
private MarshalByRefObject targetObject;
public MyProxy(Type type)
{
super(type);
targetObject =(MarshalByRefObject)Activator.CreateInstance(type);
ObjRef myObject = RemotingServices.Marshal(targetObject);
stringUri = myObject.get_URI();
} //MyProxy
public MyProxy(Type type, MarshalByRefObject targetObject)
{
super(type);
this.targetObject = targetObject;
} //MyProxy
public IMessage Invoke(IMessage message)
{
message.get_Properties() .set_Item( "__Uri" , stringUri );
IMethodMessage myMethodMessage
= (IMethodMessage)ChannelServices.SyncDispatchMessage(message);
Console.WriteLine("---------IMethodMessage example-------");
Console.WriteLine("Method name : " + myMethodMessage.get_MethodName());
Console.WriteLine("LogicalCallContext has information : "
+ myMethodMessage.get_LogicalCallContext().get_HasInfo());
Console.WriteLine("Uri : " + myMethodMessage.get_Uri());
return myMethodMessage ;
} //Invoke
} //MyProxy
.NET Framework-Sicherheit
- SecurityPermission für die Verwendung von Infrastrukturcode. Anforderungswert: SecurityAction.LinkDemand; Berechtigungswert: SecurityPermissionFlag.Infrastructure
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
IMethodMessage-Schnittstelle
IMethodMessage-Member
System.Runtime.Remoting.Messaging-Namespace