Classe MarshalByRefObject (System)

Cambia visualizzazione:
ScriptFree
Riferimento a .NET Framework
Classe MarshalByRefObject

Consente l'accesso a oggetti oltre i limiti del dominio applicazione in applicazioni che supportano servizi remoti.

Spazio dei nomi: System
Assembly: mscorlib (in mscorlib.dll)

Sintassi

Visual Basic - (Dichiarazione)
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public MustInherit Class MarshalByRefObject
Visual Basic (Utilizzo)
Dim instance As MarshalByRefObject

C#
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public abstract class MarshalByRefObject
C++
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public ref class MarshalByRefObject abstract
J#
/** @attribute SerializableAttribute() */ 
/** @attribute ComVisibleAttribute(true) */ 
public abstract class MarshalByRefObject
JScript
SerializableAttribute 
ComVisibleAttribute(true) 
public abstract class MarshalByRefObject
Note

Un dominio applicazione è una partizione di un processo del sistema operativo in cui risiede una o più applicazioni. La comunicazione fra gli oggetti all'interno del medesimo dominio applicazione è diretta. La comunicazione fra gli oggetti in domini applicazioni diversi avviene invece tramite il trasporto di copie degli oggetti stessi oltre i limiti del dominio applicazione oppure utilizzando un proxy per lo scambio di messaggi.

MarshalByRefObject è la classe base per gli oggetti in grado di comunicare oltre i limiti del dominio applicazioni con scambi di messaggi tramite un proxy. Gli oggetti che non ereditano da MarshalByRefObject sono implicitamente marshalling per valore. Quando un'applicazione remota fa riferimento a un oggetto marshalling per valore, una copia dell'oggetto viene passata oltre i limiti del dominio applicazione.

Si accede agli oggetti MarshalByRefObject direttamente all'interno del dominio applicazione. La prima volta che un'applicazione in un dominio applicazione remoto ha accesso a un oggetto MarshalByRefObject, viene passato un proxy all'applicazione remota. Per le chiamate successive sul proxy viene nuovamente effettuato il marshalling all'oggetto che risiede nel dominio applicazione locale.

I tipi devono ereditare da MarshalByRefObject quando il tipo viene utilizzato oltre i limiti del dominio applicazione e lo stato dell'oggetto non deve essere copiato poiché i membri di quest'ultimo non sono utilizzabili al di fuori del dominio applicazione in cui sono stati creati.

Esempio

Nell'esempio seguente viene illustrato l'utilizzo di una classe derivata da MarshalByRefObject utilizzato in seguito nei servizi remoti.

Visual Basic
Imports System
Imports System.Runtime.Remoting
Imports System.Security.Permissions

Public Class SetObjectUriForMarshalTest
    
    Class TestClass
        Inherits MarshalByRefObject
    End Class

    <SecurityPermission(SecurityAction.LinkDemand)> _
    Public Shared Sub Main()
        Dim obj As TestClass = New TestClass()

        RemotingServices.SetObjectUriForMarshal(obj, "testUri")
        RemotingServices.Marshal(obj)

        Console.WriteLine(RemotingServices.GetObjectUri(obj))
    End Sub

End Class

C#
using System;
using System.Runtime.Remoting;
using System.Security.Permissions;

public class SetObjectUriForMarshalTest  {

    class TestClass : MarshalByRefObject {
    }

    [SecurityPermission(SecurityAction.LinkDemand)]
    public static void Main()  {

        TestClass obj = new TestClass();    

        RemotingServices.SetObjectUriForMarshal(obj, "testUri");
        RemotingServices.Marshal(obj);

        Console.WriteLine(RemotingServices.GetObjectUri(obj));
    }
}

C++
using namespace System;
using namespace System::Runtime::Remoting;
using namespace System::Security::Permissions;

public ref class SetObjectUriForMarshalTest
{
public:
   ref class TestClass: public MarshalByRefObject{};

   [SecurityPermissionAttribute(SecurityAction::Demand, Flags=SecurityPermissionFlag::Infrastructure)]   
   static void Main()
   {
      TestClass^ obj = gcnew TestClass;
      RemotingServices::SetObjectUriForMarshal( obj,  "testUri" );
      RemotingServices::Marshal(obj);
      Console::WriteLine( RemotingServices::GetObjectUri( obj ) );
   }

};

Gerarchia di ereditarietà

System.Object
  System.MarshalByRefObject
     Classi derivate
Codice thread safe

I membri statici pubblici (Shared in Visual Basic) di questo tipo sono validi per le operazioni multithreading. I membri di istanza non sono garantiti come thread safe.
Piattaforme

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile per Pocket PC, Windows Mobile per Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema.

Informazioni sulla versione

.NET Framework

Supportato in: 2.0 1.1 1.0

.NET Compact Framework

Supportato in: 2.0 1.0
Vedere anche