Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Classe MarshalByRefObject

 

Data di pubblicazione: ottobre 2016

Consente l'accesso a oggetti attraverso limiti di dominio nelle applicazioni che supportano servizi remoti.

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

System.Object
  System.MarshalByRefObject
    Microsoft.Build.Utilities.AppDomainIsolatedTask
    Microsoft.Build.Utilities.TaskItem
    Microsoft.Build.Utilities.TaskLoggingHelper
    Microsoft.Win32.RegistryKey
    System.AddIn.Pipeline.ContractBase
    System.AppDomain
    System.AppDomainManager
    System.ComponentModel.Component
    System.ContextBoundObject
    System.Data.Common.DataColumnMapping
    System.Data.Common.DataColumnMappingCollection
    System.Data.Common.DataTableMapping
    System.Data.Common.DataTableMappingCollection
    System.Data.Common.DbDataReader
    System.Data.Common.DbParameter
    System.Data.Common.DbParameterCollection
    System.Data.Common.DbTransaction
    System.Diagnostics.TraceListener
    System.DirectoryServices.SearchResultCollection
    System.Drawing.Brush
    System.Drawing.Drawing2D.CustomLineCap
    System.Drawing.Drawing2D.GraphicsContainer
    System.Drawing.Drawing2D.GraphicsPath
    System.Drawing.Drawing2D.GraphicsPathIterator
    System.Drawing.Drawing2D.GraphicsState
    System.Drawing.Drawing2D.Matrix
    System.Drawing.Font
    System.Drawing.FontFamily
    System.Drawing.Graphics
    System.Drawing.Icon
    System.Drawing.Image
    System.Drawing.Pen
    System.Drawing.Region
    System.Drawing.StringFormat
    System.EnterpriseServices.Internal.AssemblyLocator
    System.EnterpriseServices.RegistrationHelper
    System.IO.FileSystemInfo
    System.IO.IsolatedStorage.IsolatedStorage
    System.IO.Stream
    System.IO.TextReader
    System.IO.TextWriter
    System.Messaging.MessageEnumerator
    System.Messaging.MessageQueueEnumerator
    System.Net.WebRequest
    System.Net.WebResponse
    System.Reflection.AssemblyNameProxy
    System.Runtime.InteropServices.StandardOleMarshalObject
    System.Runtime.Remoting.Lifetime.ClientSponsor
    System.Runtime.Remoting.ObjectHandle
    System.Speech.Recognition.SrgsGrammar.SrgsElement
    System.Threading.RegisteredWaitHandle
    System.Threading.Timer
    System.Threading.WaitHandle
    System.Web.Compilation.ClientBuildManager
    System.Web.Compilation.ClientBuildManagerCallback
    System.Web.Hosting.AppDomainProtocolHandler
    System.Web.Hosting.ApplicationManager
    System.Web.Hosting.HostingEnvironment
    System.Web.Hosting.ISAPIRuntime
    System.Web.Hosting.ProcessHost
    System.Web.Hosting.ProcessHostFactoryHelper
    System.Web.Hosting.ProcessProtocolHandler
    System.Web.Hosting.RecycleLimitMonitor
    System.Web.Hosting.RecycleLimitMonitor.RecycleLimitMonitorSingleton
    System.Web.Hosting.VirtualFileBase
    System.Web.Hosting.VirtualPathProvider
    System.Windows.Forms.BaseCollection
    System.Windows.Forms.NativeWindow
    System.Windows.Forms.NumericUpDownAccelerationCollection
    System.Windows.Forms.OwnerDrawPropertyBag
    System.Windows.Forms.TreeNode
    System.Windows.Interop.DocObjHost
    System.Workflow.Runtime.DebugEngine.DebugController

[SerializableAttribute]
[ComVisibleAttribute(true)]
public abstract class MarshalByRefObject

NomeDescrizione
System_CAPS_protmethodMarshalByRefObject()

Inizializza una nuova istanza della classe MarshalByRefObject.

NomeDescrizione
System_CAPS_pubmethodCreateObjRef(Type)

Crea un oggetto che contiene le informazioni necessarie per generare un proxy utilizzato per comunicare con un oggetto remoto.

System_CAPS_pubmethodEquals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente. (Ereditato da Object.)

System_CAPS_protmethodFinalize()

Consente a un oggetto di provare a liberare risorse ed eseguire altre operazioni di pulizia prima che l'oggetto stesso venga reclamato dalla procedura di Garbage Collection. (Ereditato da Object.)

System_CAPS_pubmethodGetHashCode()

Funge da funzione hash predefinita.(Ereditato da Object.)

System_CAPS_pubmethodGetLifetimeService()

Recupera l'oggetto servizio di durata corrente che controlla i criteri di durata per questa istanza.

System_CAPS_pubmethodGetType()

Ottiene l'oggetto Type dell'istanza corrente.(Ereditato da Object.)

System_CAPS_pubmethodInitializeLifetimeService()

Ottiene un oggetto servizio di durata per controllare i criteri di durata per questa istanza.

System_CAPS_protmethodMemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.(Ereditato da Object.)

System_CAPS_protmethodMemberwiseClone(Boolean)

Crea una copia superficiale dell'oggetto corrente MarshalByRefObject oggetto.

System_CAPS_pubmethodToString()

Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object.)

Un dominio applicazione è una partizione in un processo del sistema operativo in cui risiedono una o più applicazioni. Gli oggetti nello stesso dominio applicazione possono comunicare direttamente. Gli oggetti in diversi domini applicazione di comunicare tramite il trasporto di copie degli oggetti tra i limiti del dominio applicazione o tramite un proxy per lo scambio di messaggi.

MarshalByRefObjectè la classe base per gli oggetti che comunicano attraverso i limiti del dominio applicazione lo scambio 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 marshalling dall'oggetto di valore, una copia dell'oggetto viene passata attraverso i limiti del dominio applicazione.

MarshalByRefObjectgli oggetti sono accessibili direttamente all'interno del dominio dell'applicazione locale. La prima volta che un'applicazione in un remoto dominio applicazione ha accesso un MarshalByRefObject, viene passato un proxy all'applicazione remota. Vengono effettuato il marshalling di chiamate successive nel proxy all'oggetto che si trovano nel dominio dell'applicazione locale.

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

Quando si deriva un oggetto da MarshalByRefObject per l'utilizzo di limiti del dominio applicazione, eseguire l'override di uno qualsiasi dei relativi membri, né deve chiamarne i metodi direttamente. Il runtime riconosce che le classi derivate da MarshalByRefObject deve essere sottoposto a marshalling attraverso i limiti del dominio applicazione.

In questa sezione contiene due esempi di codice. Nel primo esempio viene illustrato come creare un'istanza di una classe in un altro dominio applicazione. Il secondo esempio di codice viene illustrata una classe semplice che può essere utilizzata per la comunicazione remota.

Esempio 1

Esempio di codice seguente viene illustrato il modo più semplice per eseguire codice in un altro dominio applicazione. Nell'esempio viene definita una classe denominata Worker che eredita MarshalByRefObject, con un metodo che visualizza il nome del dominio dell'applicazione in cui è in esecuzione. L'esempio crea istanze di Worker nel dominio applicazione predefinito in un nuovo dominio applicazione.

System_CAPS_noteNota

L'assembly che contiene Worker deve essere caricato in entrambi i domini applicazione, ma è stato possibile caricare altri assembly che esistono solo nel nuovo dominio applicazione.

using System;
using System.Reflection;

public class Worker : MarshalByRefObject
{
    public void PrintDomain() 
    { 
        Console.WriteLine("Object is executing in AppDomain \"{0}\"",
            AppDomain.CurrentDomain.FriendlyName); 
    }
}

class Example
{
    public static void Main()
    {
        // Create an ordinary instance in the current AppDomain
        Worker localWorker = new Worker();
        localWorker.PrintDomain();

        // Create a new application domain, create an instance
        // of Worker in the application domain, and execute code
        // there.
        AppDomain ad = AppDomain.CreateDomain("New domain");
        Worker remoteWorker = (Worker) ad.CreateInstanceAndUnwrap(
            typeof(Worker).Assembly.FullName,
            "Worker");
        remoteWorker.PrintDomain();
    }
}

/* This code produces output similar to the following:

Object is executing in AppDomain "source.exe"
Object is executing in AppDomain "New domain"
 */

Esempio 2

L'esempio seguente illustra una classe derivata da MarshalByRefObject che è usato più avanti in remoto.

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

public class SetObjectUriForMarshalTest  {

    class TestClass : MarshalByRefObject {
    }

    [SecurityPermission(SecurityAction.Demand, Flags=SecurityPermissionFlag.RemotingConfiguration)] 
    public static void Main()  {

        TestClass obj = new TestClass();    

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

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

.NET Framework
Disponibile da 1.1

I membri statici pubblici ( Condiviso in Visual Basic) di questo tipo è thread safe. Non tutti i membri di istanza sono garantiti come thread safe.

Torna all'inizio
Mostra: