Cómo crear un servidor remoto mediante Microsoft Visual C#

Para obtener una versión de este artículo para Microsoft Visual Basic .NET, vea
300951 .

Este artículo hace referencia a los siguientes espacios de nombres de la Biblioteca de clases de Microsoft .NET Framework:
  • System.Runtime.Remoting
  • System.Runtime.Remoting.Channels
  • System.Runtime.Remoting.Channels.Tcp

EN ESTA TAREA

Resumen

En este artículo se muestra cómo crear un servidor remoto sencillo al que puede tener acceso otra aplicación. La aplicación 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 aplicación de servidor. El objeto de servidor es el objeto con el que se comunica el cliente y la aplicación de servidor se utiliza para registrar el objeto de servidor con el marco de trabajo de tiempo de ejecución Remoting.

Requisitos

En la lista siguiente se describe el hardware, el software, la infraestructura de red y los Service Pack recomendados que necesitará:
  • Visual Studio .NET
  • Visual Studio 2005
En este artículo se da por supuesto que está familiarizado con los temas siguientes:
  • Visual Studio .NET o Visual Studio 2005
  • Visual C# .NET o Visual C# 2005
  • Redes

Crear el objeto de servidor remoto

El primer paso para crear la aplicación de servidor consiste en crear un objeto de servidor. El objeto de servidor es el que utiliza la aplicación cliente para crear una instancia y comunicarse con él en el equipo servidor. La aplicación cliente lleva esto a cabo a través de un objeto de proxy que se crea en el cliente. En este ejemplo, el objeto de servidor reside en una Biblioteca de clases (archivo DLL) y se llama myRemoteClass.
  1. Cree una nueva aplicación de biblioteca de clases en Visual C# .NET. Asigne al proyecto el nombre ServerClass. Se creará Class1 de manera predeterminada.
  2. En el Explorador de soluciones, cambie el nombre del archivo de código de Class1.cs a ServerClass.cs.
  3. Abra ServerClass.cs y cambie el nombre de Class1 a myRemoteClass. También debe cambiar el nombre del constructor predeterminado para la clase de manera que coincida con el nombre de clase. myRemoteClass debe heredarse de la clase MarshalByRefObject. La definición de clase debe aparecer del siguiente modo:
    public class myRemoteClass: MarshalByRefObject { public myRemoteClass() { // // TO DO: agregar aquí la lógica del constructor. // } }
  4. Agregue un método público a myRemoteClass que tome una cadena, muestre un mensaje en la consola con un valor de la cadena y devuelva True si la cadena no está vacía.
    public bool SetString(String sTemp) { try { Console.WriteLine("Esta cadena '{0}' tiene una longitud de {1}", sTemp, sTemp.Length); return sTemp != ""; } catch { return false; } }
  5. Genere el proyecto para crear el ensamblado ServerClass.dll.
  6. Guarde y cierre el proyecto.
Nota
En Visual C# 2005 se crea Program.cs en lugar de Class1.cs de forma predeterminada.

Crear la aplicación de servidor remoto

Después de haber creado 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, también debe iniciar el servidor y hacer que el servidor escuche en un puerto a los clientes que intentan conectarse a ese puerto. Para ello necesita un tipo de proyecto que genere un archivo ejecutable.

La razón para incluir el objeto de servidor en un proyecto independiente es que se pueda crear fácilmente una referencia al objeto de servidor desde el proyecto del cliente. Si incluyó el objeto de servidor en este proyecto, no podrá hacer referencia a él, ya que las referencias sólo se pueden establecer en archivos DLL.
  1. Cree una nueva aplicación de consola en Visual C# .NET para iniciar el servidor remoto. Se creará Class1 de manera predeterminada.
  2. En el Explorador de soluciones, cambie el nombre del archivo Class1.cs a RemoteServer.cs.
  3. Agregue una referencia al espacio de nombres System.Runtime.Remoting.
  4. Agregue una referencia al ensamblado ServerClass.dll que creó en la sección anterior.
  5. Utilice la instrucción using de los espacios de nombres Remoting, Remoting.Channels y Remoting.Channels.TCP para que no se le pida calificar declaraciones en esos espacios de nombre más adelante en el código. Debe emplear la instrucción using antes de cualquier otra declaración.
    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 método RegisterChannel para registrar el canal con los servicios de canal. Agregue el siguiente código de declaración en el procedimiento Main de Class1:
    TcpChannel chan = new TcpChannel(8085); ChannelServices.RegisterChannel(chan);
  7. Llame al método RegisterWellKnownType del objeto RemotingConfiguration para registrar el objeto ServerClass con el marco de trabajo Remoting y especifique los parámetros siguientes:
    • El nombre de tipo completo del objeto que se está registrando (en este ejemplo, ServerClass.myRemoteClass), seguido del nombre del ensamblado ServerClass. Debe especificar aquí tanto el nombre del espacio de nombres como el nombre de la clase. Como no especificó un espacio de nombres en la sección anterior, se utilizará el espacio de nombres raíz predeterminado.
    • Designe el extremo en el que el objeto se va a publicar como RemoteTest. Los clientes necesitan saber este nombre para conectarse al objeto.
    • Utilice el modo de objeto SingleCall para especificar el parámetro final. El modo de objeto especifica la duración 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 un cliente, aunque el mismo cliente llame al mismo método más de una vez. Por otra parte, los objetos Singleton se crean sólo 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 método ReadLine del objeto Console para mantener la aplicación de servidor en funcionamiento.
    System.Console.WriteLine("Presione <enter> para salir..."); System.Console.ReadLine();
  9. Genere el proyecto.
  10. Guarde y cierre el proyecto.
Nota
En Visual C# 2005 se crea Program.cs en lugar de Class1.cs de forma predeterminada.

Probar el objeto de servidor

Para obtener información adicional acerca de cómo crear una aplicación cliente que se comunique con el objeto de servidor que acaba de crear, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
300943 Cómo crear acceso de cliente al servidor remoto mediante Visual Basic .NET

REFERENCIAS

Para obtener información adicional al respecto, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:
301116 Cómo calcular la referencia de un objeto a un servidor remoto por valor mediante Visual Basic .NET

301112 Cómo calcular la referencia de un objeto a un servidor remoto por referencia mediante Visual Basic .NET

Para obtener información adicional acerca de la clase TcpChannel, visite el siguiente sitio Web de Microsoft Developer Network (MSDN):
Para obtener información adicional acerca del método RemotingConfiguration.RegisterWellKnownServiceType, visite el siguiente sitio Web de MSDN:Para obtener información adicional acerca de los Tutoriales rápidos, visite el siguiente sitio Web de gotodotnet.com: Para ver información general acerca de .NET Remoting, consulte la Guía del desarrollador de .NET Framework.

Para obtener información adicional acerca de los grupos de discusión de MSDN y Visual C# .NET en el grupo de noticias Usenet, visite el siguiente sitio Web de Microsoft:
Propiedades

Id. de artículo: 307445 - Última revisión: 29 abr. 2008 - Revisión: 1

Comentarios