ILogicalThreadAffinative-Schnittstelle
Markiert ein Objekt, das Objekte außerhalb einer AppDomain in einem LogicalCallContext verbreiten kann.
Namespace: System.Runtime.Remoting.Messaging
Assembly: mscorlib (in mscorlib.dll)
Syntax
'Declaration
<ComVisibleAttribute(True)> _
Public Interface ILogicalThreadAffinative
'Usage
Dim instance As ILogicalThreadAffinative
[ComVisibleAttribute(true)]
public interface ILogicalThreadAffinative
[ComVisibleAttribute(true)]
public interface class ILogicalThreadAffinative
/** @attribute ComVisibleAttribute(true) */
public interface ILogicalThreadAffinative
ComVisibleAttribute(true)
public interface ILogicalThreadAffinative
Hinweise
Bei einem Remotemethodenaufruf eines Objekts in einer anderen AppDomain generiert die aktuelle CallContext-Klasse einen LogicalCallContext, der zusammen mit dem Aufruf zum Remotespeicherort übermittelt wird. Außerhalb der AppDomain werden nur Objekte verbreitet, die die ILogicalThreadAffinative-Schnittstelle verfügbar machen und im CallContext gespeichert sind. Objekte, die diese Schnittstelle nicht unterstützen, werden in LogicalCallContext-Instanzen mit Remotemethodenaufrufen nicht übertragen.
Beispiel
Im folgenden Codebeispiel wird veranschaulicht, wie mithilfe der ILogicalThreadAffinative-Schnittstelle Principal- und Identitätsobjekte für die Identifikation an einen Remotespeicherort übertragen werden. Den in diesem Beispiel für die HelloServiceClass-Klasse verwendeten Code finden Sie im Beispiel für die GetData-Methode. Den in diesem Beispiel für die Serverklasse verwendeten Code finden Sie im Beispiel für die RegisterActivatedServiceType-Klasse. Den in diesem Beispiel für die Clientklasse verwendeten Code finden Sie im Beispiel für die CallContext-Klasse.
<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
[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;
}
}
[Serializable]
public ref class LogicalCallContextData: public ILogicalThreadAffinative
{
private:
int _nAccesses;
IPrincipal^ _principal;
public:
property String^ numOfAccesses
{
String^ get()
{
return String::Format( "The identity of {0} has been accessed {1} times.", _principal->Identity->Name, _nAccesses );
}
}
property IPrincipal^ Principal
{
IPrincipal^ get()
{
_nAccesses++;
return _principal;
}
}
LogicalCallContextData( IPrincipal^ p )
{
_nAccesses = 0;
_principal = p;
}
};
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
ILogicalThreadAffinative-Member
System.Runtime.Remoting.Messaging-Namespace