70-529 Resumen 5/13 : Creando una aplicación servidor con Remoting.
- 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.
IChannel tcp = new TcpServerChannel(8090);
ChannelServices.RegisterChannel(tcp, false);
IChannel http = new HttpServerChannel(8006);
ChannelServices.RegisterChannel(http, false);
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);