Utiliser Visual C# pour créer un serveur distant

Cet article vous aide à créer un serveur distant auquel une autre application peut accéder à l’aide de Visual C#.

Version d’origine du produit : Visual C#
Numéro de la base de connaissances d’origine : 307445

Résumé

Cet article explique comment créer un serveur distant auquel une autre application peut accéder. L’application qui accède à ce serveur peut se trouver sur le même ordinateur, sur un autre ordinateur ou sur un autre réseau. Le serveur distant est divisé en deux parties : l’objet serveur et l’application serveur. L’objet serveur est l’objet avec lequel le client communique, et l’application serveur est utilisée pour inscrire l’objet serveur auprès de l’infrastructure d’exécution .NET Remoting.

Cet article fait référence aux espaces de noms de bibliothèque de classes Microsoft .NET Framework suivants :

  • System.Runtime.Remoting
  • System.Runtime.Remoting.Channels
  • System.Runtime.Remoting.Channels.Tcp

Configuration requise

Cet article suppose que vous êtes familiarisé avec les rubriques suivantes :

  • Visual Studio .NET ou Visual Studio
  • Visual C# .NET ou Visual C#
  • Mise en réseau

Création de l’objet serveur distant

La première étape de la création de l’application serveur consiste à créer un objet serveur. L’objet serveur est ce que l’application cliente instancie et avec lequel elle communique sur l’ordinateur serveur. L’application cliente effectue cette opération par le biais d’un objet proxy créé sur le client. Dans cet exemple, l’objet serveur réside dans une bibliothèque de classes (DLL) et est appelé myRemoteClass.

  1. Créez une application bibliothèque de classes dans Visual C# .NET. Nommez le projet ServerClass. Class1 est créé par défaut.

  2. Dans Explorateur de solutions, renommez le fichier de code Class1.csen ServerClass.cs.

  3. Ouvrez ServerClass.cs et renommez Class1 en myRemoteClass. Vous devez également renommer le constructeur par défaut de la classe afin qu’il corresponde au nom de la classe. myRemoteClass doit hériter de la MarshalByRefObject classe . Votre classe doit maintenant apparaître comme suit :

    public class myRemoteClass: MarshalByRefObject
    {
        public myRemoteClass()
        {
          // TO DO: Add constructor logic here.
        }
    }
    
  4. Ajoutez une méthode publique à myRemoteClass qui accepte une chaîne, affiche un message sur la console avec une valeur de la chaîne et retourne True si la chaîne n’est pas vide.

    public bool SetString(String sTemp)
    {
         try
         {
             Console.WriteLine("This string '{0}' has a length of {1}", sTemp, sTemp.Length);
             return sTemp != "";
         }
         catch
         {
             return false;
         }
    }
    
  5. Générez le projet pour créer l’assembly ServerClass.dll .

  6. Enregistrez et fermez le projet.

Créer l’application serveur distant

Une fois que vous avez créé l’objet serveur avec lequel le client communiquera, vous devez inscrire cet objet auprès de l’infrastructure Remoting. Lorsque vous inscrivez l’objet, vous devez également démarrer le serveur et demander au serveur d’écouter sur un port pour que les clients se connectent à ce port. Pour ce faire, vous avez besoin d’un type de projet qui génère un fichier exécutable.

La raison d’inclure l’objet serveur dans un projet distinct est que vous pouvez facilement référencer l’objet serveur à partir du projet client. Si vous l’incluez dans ce projet, vous ne pouvez pas le référencer, car les références ne peuvent être définies que sur des fichiers DLL.

  1. Créez une application console dans Visual C# .NET pour démarrer le serveur distant. Class1 est créé par défaut.

  2. Dans Explorateur de solutions, renommez le fichier Class1.csen RemoteServer.cs.

  3. Ajoutez une référence à l’espace de System.Runtime.Remoting noms.

  4. Ajoutez une référence à l’assembly ServerClass.dll que vous avez créé dans la section précédente.

  5. Utilisez l’instruction using sur les Remotingespaces de noms , Remoting.Channelset Remoting.Channels.TCP afin que vous ne soyez pas obligé de qualifier les déclarations dans ces espaces de noms plus loin dans votre code. Vous devez utiliser l’instruction using avant toute autre déclaration.

    using System.Runtime.Remoting;
    using System.Runtime.Remoting.Channels;
    using System.Runtime.Remoting.Channels.Tcp;
    
  6. Déclarez la variable appropriée. Déclarez et initialisez un TcpChannel objet qui écoute les clients pour se connecter sur un port donné, qui est le port 8085 dans cet exemple. Utilisez la RegisterChannel méthode pour inscrire le canal auprès des services de canal. Ajoutez le code de déclaration suivant dans la Main procédure de Class1:

    TcpChannel chan = new TcpChannel(8085);
    ChannelServices.RegisterChannel(chan);
    
  7. Appelez la RegisterWellKnownType méthode de l’objet RemotingConfiguration pour inscrire l’objet ServerClass auprès de l’infrastructure Remoting et spécifiez les paramètres suivants :

    • Nom de type complet de l’objet en cours d’inscription (qui est ServerClass.myRemoteClass dans cet exemple), suivi du nom de l’assembly ServerClass. Spécifiez à la fois le nom de l’espace de noms ainsi que le nom de la classe ici. Étant donné que vous n’avez pas spécifié d’espace de noms dans la section précédente, l’espace de noms racine par défaut est utilisé.

    • Nommez le point de terminaison où l’objet doit être publié en tant que RemoteTest. Les clients doivent connaître ce nom pour se connecter à l’objet.

    • Utilisez le SingleCall mode objet pour spécifier le paramètre final. Le mode objet spécifie la durée de vie de l’objet lorsqu’il est activé sur le serveur. Dans le cas d’objetsSingleCall, une nouvelle instance de la classe est créée pour chaque appel qu’un client effectue, même si le même client appelle la même méthode plusieurs fois. En revanche, Singleton les objets ne sont créés qu’une seule fois et tous les clients communiquent avec le même objet.

      RemotingConfiguration.RegisterWellKnownServiceType(
      System.Type.GetType("ServerClass.myRemoteClass, ServerClass"),
      "RemoteTest",
      WellKnownObjectMode.SingleCall);
      
  8. Utilisez la ReadLine méthode de l’objet Console pour maintenir l’application serveur en cours d’exécution.

    System.Console.WriteLine("Hit <enter> to exit...");
    System.Console.ReadLine();
    
  9. Générez votre projet.

  10. Enregistrez et fermez le projet.

References

Pour obtenir une vue d’ensemble de la communication à distance .NET, consultez la documentation du Guide du développeur .NET Framework.