vtortola

70-529 Resumen 5/13 : Creando una aplicación servidor con Remoting.

Quinto repaso de 13 del temario para el examen 70-529 requerido para obtener el MCTS: Distributed Applications, del libro oficial de Microsoft.
En verdad este es el capítulo 4 del libro, pero me parece más adecuado este orden.
  • Remoting es una tecnología distribuida que permite pasar tipos de datos ricos y con fundamento de un dominio de aplicación a otro. Es más efectivo cuando el cliente y el servidor funcionan en .NET.
  • .NET 2.0 provee de tres tipos de objetos remotos:
    • Singleton: Se activa en el servidor y se usa cuando hay que mantener una información de estado entre llamadas y clientes. En terminos de rendimiento es mucho mejor ya que mantener el estado es mucho menos costoso que crear nuevos objetos cada vez.
    • SingleCall: Se activa en el servidor y se usa cuando no es necesario mantener un estado. Útil cuando se ha de balancear la carga entre los objetos. Se ejecuta un método por llamada y cuando se termina se destruye.
    • Client-activated: Se activa a petición del cliente obteniendo un objeto dedicado. Estos objetos son gestionados con una concesión de tiempo de vida que asegura que son destriuidos y no ocupan recursos innecesariamente.
  • Hay cuantro formas de hospedar un objeto remoto:
    • Aplicación de consola: Simple pero tosco y necesita se ejecutada manualmente.
    • Aplicación WinForms: Más visual pero también necesita más trabajo y también necesita ser ejecutada manualmente.
    • Aplicación Web: Puedes aprovecharte de todas las características de IIS y de la programación con ASP.NET pero claro, necesita IIS.
    • Servicio Windows: Mejor gestión de la aplicación en si pero es más complicado de depurar (Attach to process ;) ).
  • La aplicación que hospeda el objeto remoto es la responsable de registrar dicho objeto y el canal de comunicación.
  • Cuando se activa un objeto remoto, se genera un objeto proxy. Cuando y como depende de si se activa en el cliente ó en el servidor.
  • Hay tres canales sobre los que se pueden establecer comunicación con objetos remotos:
    • TCP: Con sockets y formateo binario, es el más rápido. Recomendado para redes locales.
    • HTTP: Sesiones http con formateo SOAP. Ideal para comunicación en internet.
    • IPC: Interprocesses Communication. Seguridad basada en ACLs.  Para usar en la misma máquina.
  • El único requisito para poder usar una clase como objeto remoto, es derivarla de MarshalByRefObject.
  • La clase RemoteConfiguration se usa para configurar de forma programática la aplicación servidora Remoting. Con esta clase se puede configurar las propiedades básicas del objeto remoto como el nombre de aplicación.
  • Para registrar objetos remotos activados en el servidor se usa RemotingConfiguration.RegisterWellKnowServiceType:
                //Registro objeto remoto Singleton
                RemotingConfiguration.RegisterWellKnownServiceType
                    (typeof(Server.MyRemoteClass), "MyRemoteClass1",
                    WellKnownObjectMode.Singleton);
                //Registro un objeto Client-activated
                RemotingConfiguration.RegisterActivatedServiceType
                    (typeof(Server.MyRemoteClass));
  • Si existen multiples versiones disponibles de un objeto remoto y quieres especificar una versión distinta a la última... necesitas especificar dicha versión cuando registras el objeto.
  • Los canales de comunicación se registran con ChannelServices.RegisterChannel y una instancia del canal que se quiere registrar. 
            //Registro un canal tp
            IChannel tcp = new TcpServerChannel(8090);
            ChannelServices.RegisterChannel(tcp, false);
 
            //Registro un canal http
            IChannel http = new HttpServerChannel(8006);
            ChannelServices.RegisterChannel(http, false);
 
            //Registro un canal icp
            IChannel ipc = new IpcServerChannel("ipcchannel");
            ChannelServices.RegisterChannel(ipc, false);
  • Se puede configurar el objeto remoto desde el archivo de configuración de la aplicación, pero hay que indicar el nombre del archivo:
            RemotingConfiguration.Configure("MyApp.exe.config", false);
Posted: ago 01 2007, 10:59 by vtortola | with no comments
Filed under: ,