Esporta (0) Stampa
Espandi tutto
Il presente articolo è stato tradotto automaticamente. Passare il puntatore sulle frasi nell'articolo per visualizzare il testo originale. Ulteriori informazioni.
Traduzione
Originale

Classe MarshalByRefObject

Consente l'accesso agli oggetti attraverso i limiti di domini di applicazione nelle applicazioni che supportano i servizi remoti.

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

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

Il tipo MarshalByRefObject espone i seguenti membri.

  NomeDescrizione
Metodo protettoSupportato da XNA FrameworkMarshalByRefObjectInizializza una nuova istanza di MarshalByRefObject classe.
In alto

  NomeDescrizione
Metodo pubblicoCreateObjRefCrea un oggetto che contiene tutte le informazioni rilevanti obbligatorio per generare un proxy utilizzato per comunicare con un oggetto remoto.
Metodo pubblicoSupportato da XNA FrameworkEquals(Object) Determina se l'oggetto specificato è uguale all'oggetto corrente. (Ereditato da Object)
Metodo protettoSupportato da XNA FrameworkFinalize 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)
Metodo pubblicoSupportato da XNA FrameworkGetHashCode Funge da funzione hash per un particolare tipo. (Ereditato da Object)
Metodo pubblicoGetLifetimeServiceRecupera l'oggetto corrente del servizio di durata che controlla i criteri di durata dell'istanza.
Metodo pubblicoSupportato da XNA FrameworkGetType Ottiene il Type dell'istanza corrente. (Ereditato da Object)
Metodo pubblicoInitializeLifetimeServiceOttiene un oggetto di servizio di durata per controllare i criteri di durata dell'istanza.
Metodo protettoSupportato da XNA FrameworkMemberwiseClone() Crea una copia dei riferimenti dell'oggetto Object corrente. (Ereditato da Object)
Metodo protettoMemberwiseClone(Boolean)Crea una copia superficiale corrente MarshalByRefObject oggetto.
Metodo pubblicoSupportato da XNA FrameworkToString Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object)
In alto

Un dominio applicazione è una partizione in un processo del sistema operativo in cui una o più applicazioni si trovano. Gli oggetti nello stesso dominio applicazione possono comunicare direttamente. Gli oggetti in domini applicazione diversi comunicano trasportando le copie degli oggetti attraverso i limiti del dominio applicazione, o tramite un proxy memorizzi di scambio di messaggi.

MarshalByRefObject è la classe base per gli oggetti che comunicano tra i limiti del dominio applicazione da scambiano messaggi utilizzando un proxy. Oggetti che non ereditano MarshalByRefObject sono implicitamente il 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.

MarshalByRefObject gli oggetti si accede direttamente nei limiti del dominio applicazione locale. La prima distribuzione di un'applicazione in un dominio applicazione remoto accede a un oggetto MarshalByRefObject, un proxy viene passato all'applicazione remoti. Le chiamate successive nel proxy viene effettuato il marshalling dell'oggetto che si trova 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 in quanto i membri dell'oggetto non sono utilizzabili al di fuori del dominio applicazione in cui sono stati creati.

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

Esempio 1

Nell'esempio di codice seguente viene illustrato il modo più semplice per eseguire il 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 applicazione in cui è in esecuzione. L'esempio crea istanze di Worker nel dominio applicazione predefinito e in un nuovo dominio applicazione.

NotaNota

L'assembly contenente Worker deve essere caricato in entrambi i domini applicazione, ma potrebbe caricare altri assembly che sarebbero presente 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(
            Assembly.GetExecutingAssembly().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

Nell'esempio seguente viene illustrata una classe derivata da MarshalByRefObject che sarà utilizzato più avanti nella comunicazione remota.


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

Supportato in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supportato in: 4, 3.5 SP1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (ruoli di base del server non supportati), Windows Server 2008 R2 (ruoli di base del server supportati con SP1 o versione successiva, Itanium non supportato)

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

Qualsiasi membro static (Shared in Visual Basic) pubblico di questo tipo è thread-safe. I membri di istanza non sono garantiti come thread-safe.

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.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

Aggiunte alla community

AGGIUNGI
Mostra:
© 2014 Microsoft