Este artigo foi traduzido por máquina. Para visualizar o arquivo em inglês, marque a caixa de seleção Inglês. Você também pode exibir o texto Em inglês em uma janela pop-up, movendo o ponteiro do mouse sobre o texto.
Tradução
Inglês

Classe MarshalByRefObject

 

Permite acesso a objetos entre limites de domínio de aplicativo em aplicativos que suporte remoto.

Namespace:   System
Assembly:  mscorlib (em 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.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

NomeDescrição
System_CAPS_protmethodMarshalByRefObject()

Inicializa uma nova instância da classe MarshalByRefObject.

NomeDescrição
System_CAPS_pubmethodCreateObjRef(Type)

Cria um objeto que contém todas as informações relevantes necessárias para gerar um proxy usado para se comunicar com um objeto remoto.

System_CAPS_pubmethodEquals(Object)

Verifica se o objeto especificado é igual ao objeto atual. (Herdado de Object.)

System_CAPS_protmethodFinalize()

Permite que um objeto tente liberar recursos e executar outras operações de limpeza antes que ele seja recuperado pela coleta de lixo. (Herdado de Object.)

System_CAPS_pubmethodGetHashCode()

Serve como a função de hash padrão.(Herdado de Object.)

System_CAPS_pubmethodGetLifetimeService()

Recupera o objeto atual de serviço de vida útil que controla a diretiva de vida útil para esta instância.

System_CAPS_pubmethodGetType()

Obtém o Type da instância atual.(Herdado de Object.)

System_CAPS_pubmethodInitializeLifetimeService()

Obtém um objeto de serviço de tempo de vida para controlar a diretiva de vida útil para esta instância.

System_CAPS_protmethodMemberwiseClone()

Cria uma cópia superficial do atual Object.(Herdado de Object.)

System_CAPS_protmethodMemberwiseClone(Boolean)

Cria uma cópia superficial do atual MarshalByRefObject objeto.

System_CAPS_pubmethodToString()

Retorna uma string que representa o objeto atual.(Herdado de Object.)

Um domínio de aplicativo é uma partição em um processo de sistema operacional em um ou mais aplicativos residem. Objetos no mesmo domínio de aplicativo se comunicam diretamente. Objetos em diferentes domínios de aplicativo se comunicam por transporte cópias dos objetos nos limites do domínio de aplicativo ou usando um proxy para trocar mensagens.

MarshalByRefObject é a classe base para objetos que se comunicam entre limites de domínio de aplicativo com troca de mensagens usando um proxy. Objetos que não herdam de MarshalByRefObject são implicitamente marshaling por valor. Quando um aplicativo remoto faz referência a um pacote por objeto de valor, uma cópia do objeto é passada entre limites de domínio de aplicativo.

MarshalByRefObject objetos são acessados diretamente dentro dos limites do domínio do aplicativo local. Na primeira vez que um aplicativo em um controle remoto domínio de aplicativo acessa um MarshalByRefObject, um proxy é passado para o aplicativo remoto. As chamadas subsequentes no proxy são empacotadas para o objeto que residem no domínio do aplicativo local.

Tipos devem herdar da MarshalByRefObject quando o tipo é usado nos limites do domínio de aplicativo e o estado do objeto não deve ser copiado porque os membros do objeto não são utilizáveis fora do domínio de aplicativo em que foram criados.

Quando você deriva de um objeto de MarshalByRefObject para uso nos limites do domínio de aplicativo, você não deve substituir qualquer um de seus membros, nem deve chamar seus métodos diretamente. O tempo de execução reconhece que classes derivadas de MarshalByRefObject deve ser empacotado entre limites de domínio de aplicativo.

Esta seção contém dois exemplos de código. O primeiro exemplo de código mostra como criar uma instância de uma classe em outro domínio de aplicativo. O segundo exemplo de código mostra uma classe simples que pode ser usada para comunicação remota.

Exemplo 1

O exemplo de código a seguir mostra a maneira mais simples de executar código em outro domínio de aplicativo. O exemplo define uma classe chamada Worker que herda MarshalByRefObject, com um método que exibe o nome do domínio do aplicativo no qual ele está em execução. O exemplo cria instâncias de Worker no domínio de aplicativo padrão e em um novo domínio de aplicativo.

System_CAPS_noteObservação

O assembly que contém Worker deve ser carregado em ambos os domínios de aplicativo, mas ele poderia carregar outros assemblies que deve existir apenas no novo domínio de aplicativo.

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"
 */

Exemplo 2

O exemplo a seguir demonstra uma classe derivada de MarshalByRefObject que é usada posteriormente em comunicação 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
Disponível desde 1.1

Quaisquer membros estáticos públicos ( Compartilhado no Visual Basic) desse tipo são thread-safe. Não há garantia de que qualquer membro de instância seja thread-safe.

Retornar ao início
Mostrar: