Partager via


Comment : créer une instance de type activé par le client

Cette rubrique est spécifique à la technologie héritée assurant la compatibilité descendante avec des applications existantes et n'est pas recommandée en cas de nouveau développement. Les applications distribuées doivent maintenant être développées à l'aide de  Windows Communication Foundation (WCF).

Cet article présente deux façons d'instancier un objet activé par le client. La première méthode utilise CreateInstance et la deuxième utilise l'opérateur New.

Créer une instance à l'aide d'Activator.CreateInstance

  1. Créer et enregistrer un TcpChannel

    Dim channel As TcpChannel = New TcpChannel()
     ChannelServices.RegisterChannel(channel, False)
    
    TcpChannel channel = new TcpChannel();
    ChannelServices.RegisterChannel(channel, false);
    
  2. Enregistrer l'objet activé par le client

    RemotingConfiguration.RegisterActivatedClientType( _
        GetType(MyRemoteObject), _
        "tcp://localhost:1234/MyServer")
    
    RemotingConfiguration.RegisterActivatedClientType(
        typeof(MyRemoteObject),
        "tcp://localhost:1234/MyServer");
    
  3. Appeler CreateInstance.

    Dim url() As Object = {New UrlAttribute("tcp://localhost:1234/Server")}
    Dim obj As MyRemoteObject = CType(Activator.CreateInstance( _
        GetType(MyRemoteObject), _
        Nothing, _
        url), MyRemoteObject)
    
    object[] url = { new UrlAttribute("tcp://localhost:1234/Server") };
    MyRemoteObject obj = (MyRemoteObject)Activator.CreateInstance(
        typeof(MyRemoteObject),
        null,
        url);
    

Créer une instance à l'aide de l'opérateur New

  1. Créer et enregistrer un canal

    Dim channel As TcpChannel = New TcpChannel()
     ChannelServices.RegisterChannel(channel, False)
    
    TcpChannel channel = new TcpChannel();
    ChannelServices.RegisterChannel(channel, false);
    
  2. Enregistrer l'objet activé par le client

    RemotingConfiguration.RegisterActivatedClientType( _
        GetType(MyRemoteObject), _
        "tcp://localhost:1234/MyServer")
    
    RemotingConfiguration.RegisterActivatedClientType(
        typeof(MyRemoteObject),
        "tcp://localhost:1234/MyServer");
    
  3. Appeler l'opérateur New

    Dim obj As MyRemoteObject = New MyRemoteObject(123)
    
    MyRemoteObject obj = new MyRemoteObject(123);
    

Exemple

Le code suivant illustre les deux méthodes de création d'une instance activée par le client :

Imports System
Imports System.Runtime.Remoting
Imports System.Runtime.Remoting.Channels
Imports System.Runtime.Remoting.Channels.Tcp
Imports System.Runtime.Remoting.Activation
Imports Server

Module Client

    Sub Main()
        ' Create and register a channel
        Dim channel As TcpChannel = New TcpChannel()
        ChannelServices.RegisterChannel(channel, False)

  ' Register the client activated object
        RemotingConfiguration.RegisterActivatedClientType( _
            GetType(MyRemoteObject), _
            "tcp://localhost:1234/MyServer")

  ' Call Activator.CreateInstance
    Dim obj As MyRemoteObject = CType(Activator.CreateInstance( _
       GetType(MyRemoteObject), _
       Nothing, _
           url), MyRemoteObject)
   
        ' OR call operator new
        Dim obj As MyRemoteObject = New MyRemoteObject(123)

        Console.WriteLine("Client.Main(): GetValue returned: {0}", obj.GetValue())
        Console.WriteLine("Client.Main(): Calling SetValue(10)")
        obj.SetValue(10)
        Console.WriteLine("Client.Main(): GetValue returned: {0}", obj.GetValue())
    End Sub

End Module
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Activation;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using Server;

namespace Client
{
    class Client
    {
        static void Main(string[] args)
        {
// Create and register channel
            TcpChannel channel = new TcpChannel();
            ChannelServices.RegisterChannel(channel, false);

// Register client activated object
            RemotingConfiguration.RegisterActivatedClientType(
                typeof(MyRemoteObject),
                "tcp://localhost:1234/MyServer");

// Call Activator.CreateInstance
object[] url = { new  UrlAttribute("tcp://localhost:1234/Server") };
         MyRemoteObject obj = (MyRemoteObject)Activator.CreateInstance(
            typeof(MyRemoteObject),
            null,
               url);
      // OR call operator new
            MyRemoteObject obj = new MyRemoteObject(123);

            Console.WriteLine("Client.Main(): GetValue returned: " + obj.GetValue());
            Console.WriteLine("Client.Main(): Calling SetValue(10)");
            obj.SetValue(10);
            Console.WriteLine("Client.Main(): GetValue returned: " + obj.GetValue());
        }
    }
}

Compilation du code

Cet exemple nécessite :

Voir aussi

Concepts

Activation d'objets distants
Configuration d'applications distantes
Activation serveur
Baux de durée de vie
Activation client

Date de génération : 2010-02-13