| Notre exemple permettra à un processus client d'envoyer un bref 
        message texte à un processus serveur, à partir des mécanismes 
        de Remoting 
        de .NET. Le client et le serveur utiliseront tous deux une interface commune, 
        Recepteur.IRecepteur, pour transiger le message en question. Un 
        serveur possible, ServeurAfficheurSimpliste, 
        implémente cette interface (en pratique, on aurait pu laisser cette 
        définition dans le code du serveur, plus bas). Si vous désirez implémenter cet exemple, placez le code 
        à droite dans un projet de type Bibliothèque de classes. 
        Je présumerai plus bas que vous aurez nommé ce projet 
        Recepteur, donc qu'il générera le fichier 
        Recepteur.dll lorsqu'il sera compilé.  | using System;
namespace Recepteur
{
   public interface IRecepteur
   {
      void Recevoir(string message);
   }
   public class ServeurAfficheurSimpliste
      : MarshalByRefObject, IRecepteur
   {
      public ServeurAfficheurSimpliste()
      {
      }
      public void Recevoir(string message)
      {
         Console.WriteLine("Message reçu : {0}", message);
      }
   }
}
 | 
   
    | Le client simple proposé ici sera un programme (une application 
        console) qui : 
        lira une ligne au clavier;créera puis enregistrera un canal de communication par protocole 
          http, connecté au port 4433 de 
          l'ordinateur de son homologue (ici, l'ordinateur est 
          localhost);instanciera un intermédiaire (un Proxy) 
          vers le serveur; etinvoquera ses services. | using System;
using System.Runtime.Remoting;
// ajouter référence sur System.Runtime.Remoting.dll
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Http;
namespace ClientRemoting
{
   class Client
   {
      [STAThread]
      static void Main(string[] args)
      {
         Console.Write("Message à envoyer : ");
         string msg = System.Console.ReadLine();
         const short PORT = 4433;
         HttpChannel canal = new HttpChannel();
         ChannelServices.RegisterChannel(canal, false);
         // ajouter une référence sur Recepteur.dll
         Recepteur.IRecepteur recepteur =
            (Recepteur.IRecepteur)System.Activator.GetObject
               (typeof(Recepteur.ServeurAfficheurSimpliste),
                "http://localhost:" + PORT + "/Recepteur.soap");
         recepteur.Recevoir(msg);
         Console.WriteLine("Envoi de {0} complété", msg);
      }
   }
}
 | 
   
    | Le serveur simple proposé ici sera lui aussi un petit programme 
        (une application console) qui : 
        créera puis enregistrera un canal de communication par protocole 
          http, s'appropriant le port 4433 sur 
          l'ordinateur courant;offrira une instance du petit serveur ServeurAfficheurSimpliste 
          sous un mode singleton 
          (créé une fois, utilisé par tous les clients; on 
          aurait aussi pu utiliser le mode Single Call, où le 
          serveur aurait été créé une fois par invocation); 
          etattendra qu'un usager termine le programme. Les échanges à travers le canal sont transigés en 
        format SOAP, 
        un format respectant les règles du métalangage 
        XML. | using System;
using System.Runtime.Remoting;
// ajouter référence sur System.Runtime.Remoting.dll
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Http;
namespace ServeurRemoting
{
   class Serveur
   {
      [System.STAThread]
      static void Main(string[] args)
      {
         const short PORT = 4433;
         HttpChannel canal = new HttpChannel(PORT);
         ChannelServices.RegisterChannel(canal, false);
         // ajouter une référence sur Recepteur.dll
         RemotingConfiguration.RegisterWellKnownServiceType
            (typeof(Recepteur.ServeurAfficheurSimpliste), "Recepteur.soap",
             WellKnownObjectMode.Singleton); // ou WellKnownObjectMode.SingleCall
         Console.Write("Pressez une touche puis <enter> pour fermer le serveur");
         Console.ReadLine();
      }
   }
}
 |