Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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.
Créez une application bibliothèque de classes dans Visual C# .NET. Nommez project ServerClass. La classe1 est créée par défaut.
Dans Explorateur de solutions, renommez le fichier de code Class1.cs en ServerClass.cs.
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. } }
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; } }
Générez le projet pour créer l’assembly ServerClass.dll.
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.
Créez une application console dans Visual C# .NET pour démarrer le serveur distant. La classe1 est créée par défaut.
Dans Explorateur de solutions, renommez le fichier Class1.cs en RemoteServer.cs.
Ajoutez une référence à l’espace
System.Runtime.Remoting
de noms.Ajoutez une référence à l’assembly ServerClass.dll que vous avez créé dans la section précédente.
Utilisez l’instruction sur les
using
Remoting
espaces de noms ,Remoting.Channels
etRemoting.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’instructionusing
avant toute autre déclaration.using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Tcp;
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 laRegisterChannel
méthode pour inscrire le canal auprès des services de canal. Ajoutez le code de déclaration suivant dans laMain
procédure deClass1
:TcpChannel chan = new TcpChannel(8085); ChannelServices.RegisterChannel(chan);
Appelez la
RegisterWellKnownType
méthode de l’objetRemotingConfiguration
pour inscrire l’objetServerClass
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’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 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);
Utilisez la
ReadLine
méthode de l’objetConsole
pour maintenir l’application serveur en cours d’exécution.System.Console.WriteLine("Hit <enter> to exit..."); System.Console.ReadLine();
Générez votre projet.
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.