ILogicalThreadAffinative Interface
Marks an object that can propagate outside of an AppDomain in a LogicalCallContext.
[Visual Basic] Public Interface ILogicalThreadAffinative [C#] public interface ILogicalThreadAffinative [C++] public __gc __interface ILogicalThreadAffinative [JScript] public interface ILogicalThreadAffinative
Remarks
When a remote method call is made to an object in another AppDomain, the current CallContext class generates a LogicalCallContext that travels along with the call to the remote location. Only objects that expose the ILogicalThreadAffinative interface and are stored in the CallContext are propagated outside the AppDomain. Objects that do not support this interface are not transmitted in LogicalCallContext instances with remote method calls.
Example
[Visual Basic, C#, C++] The following code example demonstrates the use of the ILogicalThreadAffinative interface to transmit Principal and Identity Objects to a remote location for identification. To view the code for the HelloServiceClass class used in the sample, see the example for the GetData method. To view the code for the server class used in this sample, see example for the RegisterActivatedServiceType class. To view the code for the client class used in the sample, see the examplefor the CallContext class.
[Visual Basic] <Serializable()> Public Class LogicalCallContextData Implements ILogicalThreadAffinative Private _nAccesses As Integer Private _principal As IPrincipal Public ReadOnly Property numOfAccesses() As String Get Return [String].Format("The identity of {0} has been accessed {1} times.", _principal.Identity.Name, _nAccesses) End Get End Property Public ReadOnly Property Principal() As IPrincipal Get _nAccesses += 1 Return _principal End Get End Property Public Sub New(p As IPrincipal) _nAccesses = 0 _principal = p End Sub 'New End Class 'LogicalCallContextData [C#] [Serializable] public class LogicalCallContextData : ILogicalThreadAffinative { int _nAccesses; IPrincipal _principal; public string numOfAccesses { get { return String.Format("The identity of {0} has been accessed {1} times.", _principal.Identity.Name, _nAccesses); } } public IPrincipal Principal { get { _nAccesses ++; return _principal; } } public LogicalCallContextData(IPrincipal p) { _nAccesses = 0; _principal = p; } } [C++] [Serializable] public __gc class LogicalCallContextData : public ILogicalThreadAffinative { int _nAccesses; IPrincipal* _principal; public: __property String* get_numOfAccesses() { return String::Format(S"The identity of {0} has been accessed {1} times.", _principal->Identity->Name, __box(_nAccesses)); } public: __property IPrincipal* get_Principal() { _nAccesses ++; return _principal; } public: LogicalCallContextData(IPrincipal* p) { _nAccesses = 0; _principal = p; } };
[JScript] No example is available for JScript. To view a Visual Basic, C#, or C++ example, click the Language Filter button
in the upper-left corner of the page.
Requirements
Namespace: System.Runtime.Remoting.Messaging
Platforms: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 family
Assembly: Mscorlib (in Mscorlib.dll)