IMethodMessage.LogicalCallContext 属性

定义

获取当前方法调用的 LogicalCallContextGets the LogicalCallContext for the current method call.

public:
 property System::Runtime::Remoting::Messaging::LogicalCallContext ^ LogicalCallContext { System::Runtime::Remoting::Messaging::LogicalCallContext ^ get(); };
[get: System.Security.SecurityCritical]
public System.Runtime.Remoting.Messaging.LogicalCallContext LogicalCallContext { get; }
member this.LogicalCallContext : System.Runtime.Remoting.Messaging.LogicalCallContext
Public ReadOnly Property LogicalCallContext As LogicalCallContext

属性值

获取当前方法调用的 LogicalCallContextGets the LogicalCallContext for the current method call.

属性

异常

直接调用方通过引用接口进行调用,且没有基础结构权限。The immediate caller makes the call through a reference to the interface and does not have infrastructure permission.

示例

下面的示例代码演示如何使用LogicalCallContext属性来确定是否有任何值附加到逻辑线程。The following example code shows how to use the LogicalCallContext property to determine whether any values are attached to the logical thread.

//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;
   }
};
   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;
   }
}

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

<SecurityPermission(SecurityAction.LinkDemand)> _
   Public Sub New(type As Type, targetObject As MarshalByRefObject)
      MyBase.New(type)
      Me.targetObject = targetObject
   End Sub


<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

安全性

SecurityPermission
用于处理基础结构代码。for operating with infrastructure code. 要求值: LinkDemand;权限值:InfrastructureDemand value: LinkDemand; Permission value: Infrastructure

适用于