Está en la página 1de 4

Creando un Servidor Remoto mediante Visual C# .

NET
RESUMEN En este artculo se muestra cmo crear un sencillo servidor remoto al que puede tener acceso otra aplicacin. La aplicacin que tiene acceso a este servidor se puede ubicar en el mismo equipo, en otro equipo o en otra red. El servidor remoto se divide en dos partes: el objeto de servidor y la aplicacin de servidor. El objeto de servidor es el objeto con el que se comunica el cliente, y la aplicacin servidor se utiliza para registrar el objeto de servidor con el marco de trabajo de tiempo de ejecucin Remoting. Requisitos La lista siguiente describe el hardware, el software, la infraestructura y los service pack recomendados que se necesitarn: Visual Studio .NET En el presente artculo se da por supuesto que est familiarizado con los temas siguientes: Visual Studio .NET Visual C# .NET Redes

Crear el objeto de un servidor remoto El primer paso para crear la aplicacin de servidor consiste en crear el objeto de servidor. El objeto de servidor es el que utiliza la aplicacin cliente para crear una instancia y comunicarse con l en el equipo servidor. La aplicacin cliente lleva esto a cabo a travs de un objeto de proxy que se crea en el cliente. En este ejemplo, el objeto de servidor reside en una biblioteca de clases (DLL) y se llama myRemoteClass. Cree una nueva aplicacin de biblioteca de clases en Visual C# .NET. D como nombre ServerClass al proyecto. Class1 se crea de forma predeterminada. 2. En el Explorador de soluciones, cambie el nombre del archivo de cdigo de Class1.cs a ServerClass.cs. 3. Abra ServerClass.cs y cambie el nombre de Class1 a myRemoteClass. Asimismo, debe cambiar el nombre del constructor predeterminado de la clase, de manera que coincida con el nombre de la clase. myRemoteClass debe heredarse de la clase MarshalByRefObject. La definicin de clase debe aparecer del siguiente modo: 1.

public class myRemoteClass: MarshalByRefObject { public myRemoteClass() { // // PARA HACERLO: agregue una lgica de constructor aqu // }} 4. Agregue un mtodo pblico a myRemoteClass, que toma una cadena, muestra un mensaje en la consola con un valor de la cadena y devuelve True si la cadena no est vaca. public bool SetString(String sTemp) { try { sTemp.Length); Console.WriteLine("Esta cadena '{0}' tiene una longitud de {1}", sTemp, return sTemp != ""; } catch { return false; }} 5. Genere el proyecto para crear el ensamblado de ServerClass.dll. 6. Guarde y cierre el proyecto.

Crear la aplicacin de un servidor remoto Despus de crear el objeto de servidor con el que se comunicar el cliente, debe registrar este objeto con el marco de trabajo Remoting. Al registrar el objeto, tambin debe iniciar el servidor y hacer que el servidor escuche en un puerto a los clientes que intentan conectarse a ese puerto. Para hacer esto, necesita un tipo de proyecto que genere un archivo ejecutable.

La razn para incluir el objeto de servidor en un proyecto independiente es que se pueda crear fcilmente una referencia al objeto de servidor desde el proyecto del cliente. Si incluy el objeto de servidor en este proyecto, no podr hacer referencias a l, ya que las referencias slo se pueden establecer en archivos DLL. 1. 2. 3. 4. 5. Para simplificar las cosas, cree una nueva aplicacin de consola en Visual C# .NET para iniciar el servidor remoto. Class1 se crea de forma predeterminada. En el Explorador de soluciones, cambie el nombre del archivo de Class1.cs a RemoteServer.cs. Agregue una referencia al espacio de nombres System.Runtime.Remoting. Agregue una referencia al ensamblado ServerClass.dll que cre en la seccin anterior. Utilice la instruccin using de los espacios de nombres Remoting, Remoting.Channels y Remoting.Channels.TCP, para que no se le pida calificar en el cdigo declaraciones en esos espacios de nombre ms adelante. Debe utilizar la instruccin using antes que cualquier otra declaracin.

using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Tcp; 6. Declare la variable apropiada. Declare e inicialice un objeto TcpChannel que escuche a los clientes que se conectan a un determinado puerto (en este ejemplo, el puerto 8085). Utilice el mtodo RegisterChannel para registrar el canal con los servicios de canal. Agregue el siguiente cdigo de declaracin en el procedimiento Main de Class1: TcpChannel chan = new TcpChannel(8085); ChannelServices.RegisterChannel(chan); 7. Llame al mtodo RegisterWellKnownType del objeto RemotingConfiguration para registrar el objeto ServerClass con el marco de trabajo Remoting y especifique los siguientes parmetros: 1. El nombre de tipo completo del objeto que se est registrando (en este ejemplo, ServerClass.myRemoteClass) seguido por el nombre de ensamblado (ServerClass). Debe especificar aqu tanto el nombre del espacio de nombres como el nombre de la clase. Dado que no especific un espacio de nombre en la seccin anterior, se utilizar el espacio de nombre raz predeterminado. 2. Designe el extremo en el que el objeto se va a publicar como RemoteTest . Los clientes necesitan saber este nombre para conectarse al objeto. 3. Utilice el modo de objeto SingleCall para especificar el parmetro final. El modo de objeto especifica la duracin del objeto cuando se activa en el servidor. En el caso de los objetos SingleCall, se crea una nueva instancia de la clase para cada llamada realizada por el cliente, aunque el mismo cliente llame al mismo mtodo ms de una vez. Por el contrario, los objetos Singleton se crean slo una vez, y todos los clientes se comunican con el mismo objeto. RemotingConfiguration.RegisterWellKnownServiceType( System.Type.GetType("ServerClass.myRemoteClass, ServerClass"), "RemoteTest", WellKnownObjectMode.SingleCall);

8. Utilice el mtodo ReadLine del objeto Console para mantener la aplicacin de servidor en funcionamiento System.Console.WriteLine("Presione <entrar> para salir..."); System.Console.ReadLine(); 1. 2. Genere el proyecto. Guarde y cierre el proyecto.

Clase TCPChannel http://msdn.microsoft.com/library/default.asp?url=/library/enus/cpref/html/frlrfSystemRuntimeRemotingChannelsTcpTcpChannelClassTopic.asp RegisterWellKnownServiceType method http://msdn.microsoft.com/library/default.asp?url=/library/enus/cpref/html/frlrfSystemRuntimeRemotingRemotingConfigurationClassRegisterWellKnownServiceTypeTopic.asp

Publicado Originalmente en el Microsoft KB

También podría gustarte