Partager via


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 du produit d’origine : Visual C#
Numéro de 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 du framework 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

Spécifications

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 communique avec l’ordinateur serveur. L’application cliente effectue cette opération via 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 project ServerClass. La classe1 est créée par défaut.

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

  3. Ouvrez ServerClass.cs et renommez Class1 en myRemoteClass. Vous devez également renommer le constructeur par défaut de la classe pour qu’elle 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 dans 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 faire écouter le serveur 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 de sorte que vous puissiez facilement référencer l’objet serveur à partir du projet client. Si vous l’incluez dans ce projet, vous ne pouvez pas la 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. La classe1 est créée par défaut.

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

  3. Ajoutez une référence à l’espace System.Runtime.Remoting de 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 sur les using Remotingespaces de noms , Remoting.Channelset Remoting.Channels.TCP les espaces de noms 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 à 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 inscrit (qui est ServerClass.myRemoteClass dans cet exemple), suivi du nom d’assembly ServerClass. Spécifiez à la fois le nom de l’espace de noms ainsi que le nom de classe ici. Comme 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’objets SingleCall , 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 sont créés 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.