MarshalByRefObject MarshalByRefObject MarshalByRefObject MarshalByRefObject Class

Définition

Permet l’accès aux objets au-delà des limites du domaine d’application dans les applications qui prennent en charge l’accès distant.Enables access to objects across application domain boundaries in applications that support remoting.

public ref class MarshalByRefObject abstract
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public abstract class MarshalByRefObject
type MarshalByRefObject = class
Public MustInherit Class MarshalByRefObject
Héritage
MarshalByRefObjectMarshalByRefObjectMarshalByRefObjectMarshalByRefObject
Dérivé
Attributs

Exemples

Cette section contient deux exemples de code.This section contains two code examples. Le premier exemple de code montre comment créer une instance d’une classe dans un autre domaine d’application.The first code example shows how to create an instance of a class in another application domain. Le deuxième exemple de code montre une classe simple qui peut être utilisée pour la communication à distance.The second code example shows a simple class that can be used for remoting.

Exemple 1Example 1

L’exemple de code suivant montre la façon la plus simple d’exécuter du code dans un autre domaine d’application.The following code example shows the simplest way to execute code in another application domain. L’exemple définit une classe nommée Worker qui MarshalByRefObjecthérite de, avec une méthode qui affiche le nom du domaine d’application dans lequel elle s’exécute.The example defines a class named Worker that inherits MarshalByRefObject, with a method that displays the name of the application domain in which it is executing. L’exemple crée des instances Worker de dans le domaine d’application par défaut et dans un nouveau domaine d’application.The example creates instances of Worker in the default application domain and in a new application domain.

Notes

L’assembly qui Worker contient doit être chargé dans les deux domaines d’application, mais il peut charger d’autres assemblys qui existent uniquement dans le nouveau domaine d’application.The assembly that contains Worker must be loaded into both application domains, but it could load other assemblies that would exist only in the new application domain.

using namespace System;
using namespace System::Reflection;

public ref class Worker : MarshalByRefObject
{
public:
    void PrintDomain() 
    { 
        Console::WriteLine("Object is executing in AppDomain \"{0}\"",
            AppDomain::CurrentDomain->FriendlyName); 
    }
};
 
void main()
{
    // Create an ordinary instance in the current AppDomain
    Worker^ localWorker = gcnew 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(
        Worker::typeid->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"
 */
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"
 */
Imports System.Reflection

Public Class Worker
    Inherits MarshalByRefObject
    
    Public Sub PrintDomain() 
        Console.WriteLine("Object is executing in AppDomain ""{0}""", _
            AppDomain.CurrentDomain.FriendlyName)
    End Sub 
End Class 

Class Example
    
    Public Shared Sub Main() 
        ' Create an ordinary instance in the current AppDomain
        Dim localWorker As New Worker()
        localWorker.PrintDomain()
        
        ' Create a new application domain, create an instance
        ' of Worker in the application domain, and execute code
        ' there.
        Dim ad As AppDomain = AppDomain.CreateDomain("New domain")
        Dim remoteWorker As Worker = CType( _
            ad.CreateInstanceAndUnwrap( _
                GetType(Worker).Assembly.FullName, _
                "Worker"), _
            Worker)
        remoteWorker.PrintDomain()
    
    End Sub 
End Class 

' This code produces output similar to the following:
'
'Object is executing in AppDomain "source.exe"
'Object is executing in AppDomain "New domain"

Exemple 2Example 2

L’exemple suivant illustre une classe dérivée MarshalByRefObject de qui est utilisée ultérieurement dans la communication à distance.The following example demonstrates a class derived from MarshalByRefObject that is used later in remoting.

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::RemotingConfiguration)]   
   static void Main()
   {
      TestClass^ obj = gcnew TestClass;
      RemotingServices::SetObjectUriForMarshal( obj,  "testUri" );
      RemotingServices::Marshal(obj);
      Console::WriteLine( RemotingServices::GetObjectUri( obj ) );
   }

};
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));
    }
}
Imports System.Runtime.Remoting
Imports System.Security.Permissions


Public Class SetObjectUriForMarshalTest
    
    Class TestClass
        Inherits MarshalByRefObject
    End Class

    <SecurityPermission(SecurityAction.Demand, Flags:= SecurityPermissionFlag.RemotingConfiguration )> _
    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

Remarques

Un domaine d’application est une partition dans un processus de système d’exploitation où une ou plusieurs applications résident.An application domain is a partition in an operating system process where one or more applications reside. Les objets dans le même domaine d’application communiquent directement.Objects in the same application domain communicate directly. Les objets dans différents domaines d’application communiquent soit en transportant des copies d’objets au-delà des limites du domaine d’application, soit en utilisant un proxy pour échanger des messages.Objects in different application domains communicate either by transporting copies of objects across application domain boundaries, or by using a proxy to exchange messages.

MarshalByRefObjectest la classe de base pour les objets qui communiquent au-delà des limites du domaine d’application en échangeant des messages à l’aide d’un proxy.MarshalByRefObject is the base class for objects that communicate across application domain boundaries by exchanging messages using a proxy. Les objets qui n’héritent MarshalByRefObject pas de sont implicitement marshalés par valeur.Objects that do not inherit from MarshalByRefObject are implicitly marshal by value. Lorsqu’une application distante fait référence à un objet marshal by value, une copie de l’objet est passée au-delà des limites du domaine d’application.When a remote application references a marshal by value object, a copy of the object is passed across application domain boundaries.

MarshalByRefObjectles objets sont accessibles directement dans les limites du domaine d’application local.MarshalByRefObject objects are accessed directly within the boundaries of the local application domain. La première fois qu’une application dans un domaine d’application distant accède MarshalByRefObjectà un, un proxy est transmis à l’application distante.The first time an application in a remote application domain accesses a MarshalByRefObject, a proxy is passed to the remote application. Les appels suivants sur le proxy sont marshalés de nouveau vers l’objet résidant dans le domaine d’application local.Subsequent calls on the proxy are marshaled back to the object residing in the local application domain.

Les types doivent hériter de MarshalByRefObject lorsque le type est utilisé au-delà des limites du domaine d’application, et l’état de l’objet ne doit pas être copié parce que les membres de l’objet ne sont pas utilisables en dehors du domaine d’application dans lequel ils ont été créés.Types must inherit from MarshalByRefObject when the type is used across application domain boundaries, and the state of the object must not be copied because the members of the object are not usable outside the application domain where they were created.

Lorsque vous dérivez un MarshalByRefObject objet de pour une utilisation au-delà des limites du domaine d’application, vous ne devez pas substituer l’un de ses membres, ni appeler directement ses méthodes.When you derive an object from MarshalByRefObject for use across application domain boundaries, you should not override any of its members, nor should you call its methods directly. Le runtime reconnaît que les classes dérivées de doivent être marshalées à travers les limites du MarshalByRefObject domaine d’application.The runtime recognizes that classes derived from MarshalByRefObject should be marshaled across app domain boundaries.

Constructeurs

MarshalByRefObject() MarshalByRefObject() MarshalByRefObject() MarshalByRefObject()

Initialise une nouvelle instance de la classe MarshalByRefObject.Initializes a new instance of the MarshalByRefObject class.

Méthodes

CreateObjRef(Type) CreateObjRef(Type) CreateObjRef(Type) CreateObjRef(Type)

Crée un objet contenant toutes les informations appropriées requises pour générer un proxy permettant de communiquer avec un objet distant.Creates an object that contains all the relevant information required to generate a proxy used to communicate with a remote object.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Détermine si l'objet spécifié est identique à l'objet actuel.Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Fait office de fonction de hachage par défaut.Serves as the default hash function.

(Inherited from Object)
GetLifetimeService() GetLifetimeService() GetLifetimeService() GetLifetimeService()

Récupère l'objet de service de durée de vie en cours qui contrôle la stratégie de durée de vie de cette instance.Retrieves the current lifetime service object that controls the lifetime policy for this instance.

GetType() GetType() GetType() GetType()

Obtient le Type de l'instance actuelle.Gets the Type of the current instance.

(Inherited from Object)
InitializeLifetimeService() InitializeLifetimeService() InitializeLifetimeService() InitializeLifetimeService()

Obtient un objet de service de durée de vie pour contrôler la stratégie de durée de vie de cette instance.Obtains a lifetime service object to control the lifetime policy for this instance.

MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Crée une copie superficielle de l'objet Object actuel.Creates a shallow copy of the current Object.

(Inherited from Object)
MemberwiseClone(Boolean) MemberwiseClone(Boolean) MemberwiseClone(Boolean) MemberwiseClone(Boolean)

Crée une copie superficielle de l'objet MarshalByRefObject actuel.Creates a shallow copy of the current MarshalByRefObject object.

ToString() ToString() ToString() ToString()

Retourne une chaîne qui représente l'objet actuel.Returns a string that represents the current object.

(Inherited from Object)

S’applique à