Uso de Visual C# para crear un servidor remoto

Este artículo le ayuda a crear un servidor remoto al que otra aplicación puede acceder mediante Visual C#.

Versión original del producto: Visual C#
Número de KB original: 307445

Resumen

En este artículo se muestra cómo crear un servidor remoto al que otra aplicación puede acceder. La aplicación que accede a este servidor se puede encontrar en el mismo equipo, en otro equipo o en una red diferente. 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 usa para registrar el objeto de servidor con el marco de tiempo de ejecución de .NET Remoting.

En este artículo se 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

Requisitos

En este artículo se supone que está familiarizado con los temas siguientes:

  • Visual Studio .NET o Visual Studio
  • Visual C# .NET o Visual C#
  • Redes

Creación del objeto de servidor remoto

El primer paso para crear la aplicación de servidor es crear un objeto de servidor. El objeto de servidor es lo que crea una instancia de la aplicación cliente y se comunica con en el equipo servidor. La aplicación cliente lo hace a través de un objeto proxy que se crea en el cliente. En este ejemplo, el objeto de servidor reside en una biblioteca de clases (DLL) y se denomina myRemoteClass.

  1. Cree una nueva aplicación de biblioteca de clases en Visual C# .NET. Asigne al proyecto el nombre ServerClass. La clase 1 se crea de forma predeterminada.

  2. En Explorador de soluciones, cambie el nombre del archivo de código 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 de la clase a para que coincida con el nombre de clase. myRemoteClass debe heredar de la MarshalByRefObject clase . La clase debería aparecer ahora de la siguiente manera:

    public class myRemoteClass: MarshalByRefObject
    {
        public myRemoteClass()
        {
          // TO DO: Add constructor logic here.
        }
    }
    
  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("This string '{0}' has a length of {1}", sTemp, sTemp.Length);
             return sTemp != "";
         }
         catch
         {
             return false;
         }
    }
    
  5. Compile el proyecto para crear el ensamblado ServerClass.dll .

  6. Guarde y cierre el proyecto.

Creación de la aplicación de servidor remoto

Después de crear el objeto de servidor con el que se comunicará el cliente, debe registrar este objeto con el marco de comunicación remota. Al registrar el objeto, también debe iniciar el servidor y hacer que el servidor escuche en un puerto para que los clientes se conecten 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 para que pueda hacer referencia fácilmente al objeto de servidor desde el proyecto cliente. Si lo incluye en este proyecto, no puede hacer referencia a él, ya que las referencias solo se pueden establecer en archivos DLL.

  1. Cree una nueva aplicación de consola en Visual C# .NET para iniciar el servidor remoto. La clase 1 se crea de forma predeterminada.

  2. En Explorador de soluciones, cambie el nombre del archivo Class1.cs a RemoteServer.cs.

  3. Agregue una referencia al espacio de System.Runtime.Remoting nombres.

  4. Agregue una referencia al ensamblado ServerClass.dll que creó en la sección anterior.

  5. Use la using instrucción en los Remotingespacios de nombres , Remoting.Channelsy Remoting.Channels.TCP para que no sea necesario calificar las declaraciones en esos espacios de nombres más adelante en el código. Debe usar la using instrucción 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 adecuada. Declare e inicialice un TcpChannel objeto que escuche a los clientes para conectarse en un puerto determinado, que es el puerto 8085 en este ejemplo. Use el RegisterChannel método para registrar el canal con los servicios del canal. Agregue el código de declaración siguiente en el Main procedimiento de Class1:

    TcpChannel chan = new TcpChannel(8085);
    ChannelServices.RegisterChannel(chan);
    
  7. Llame al RegisterWellKnownType método del RemotingConfiguration objeto para registrar el ServerClass objeto con el marco Remoting y especifique los parámetros siguientes:

    • Nombre de tipo completo del objeto que se está registrando (que es ServerClass.myRemoteClass en este ejemplo), seguido del nombre de ensamblado ServerClass. Especifique el nombre del espacio de nombres, así como el nombre de clase aquí. Dado que no especificó un espacio de nombres en la sección anterior, se usa el espacio de nombres raíz predeterminado.

    • Asigne al punto de conexión el nombre donde se va a publicar el objeto como RemoteTest. Los clientes deben conocer este nombre para conectarse al objeto .

    • Use el modo de SingleCall objeto 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 SingleCall los objetos, se crea una nueva instancia de la clase para cada llamada que realiza un cliente, incluso si el mismo cliente llama al mismo método más de una vez. Por otro lado, Singleton los objetos se crean solo una vez y todos los clientes se comunican con el mismo objeto.

      RemotingConfiguration.RegisterWellKnownServiceType(
      System.Type.GetType("ServerClass.myRemoteClass, ServerClass"),
      "RemoteTest",
      WellKnownObjectMode.SingleCall);
      
  8. Use el ReadLine método del Console objeto para mantener la aplicación de servidor en ejecución.

    System.Console.WriteLine("Hit <enter> to exit...");
    System.Console.ReadLine();
    
  9. Compile el proyecto.

  10. Guarde y cierre el proyecto.

Referencias

Para obtener información general sobre la comunicación remota de .NET, consulte la documentación de la Guía del desarrollador de .NET Framework.