June 1st, 2007Programación con C# y .NET Remoting/Mono Remoting [2/7]
Indice general de los manuales
- Introducción, instalación en Ubuntu y creación de una calculadora.
- Modos de compartición de objetos. Creando nuestra primera calculadora distribuida. « [Leyendo]
- Canales: TCP y HTTP. Configuración en archivo XML.
- Uso de interfaces para separar el código entre cliente y servidor.
Introducción
El objetivo de esta lección es conocer la forma en la que un servidor puede compartir su calculadora y también modificar ligeramente nuestra calculadora para que sea una clase referenciada remotamente. No es objetivo aprenderse estos conceptos de memoria ni comprenderlos completamente, ya que en las siguientes lecciones haremos un programa por cada una de estas formas.
El código fuente de este tutorial te lo puedes bajar desde aquí.
1. Formas de compartir nuestra calculadora
Hay varias formas de compartir remotamente una clase desde un servidor.
-
SingleCall: Los clientes solo podrán hacer una invocación al método de una clase y obtener una respuesta, pero el objeto del servidor no podrá guardar el estado, ya que el servidor creará un nuevo objeto por petición del cliente, efectuará la operación solicitada y destruirá la instanciación de ese objeto.

En el ejemplo ilustramos como después de la primera llamada (estrella 1), el servidor crea un objeto de la calculadora, hace la petición de la suma, después le devuelve el resultado al cliente y a continuación borra el objeto del servidor. La segunda llamada (estrella 2) que hace el cliente a la calculadora, el servidor crear el objeto y hasta que no le responda al cliente, el objeto no lo borrará. Podemos comprobar como nos sería imposible guardar el estado de un objeto, ya que el servidor borra el objeto al dar una respuesta al cliente.
-
Singleton: Con este modo, todos los clientes comparten un mismo objeto en el servidor. De este modo, el servidor si que guarda una única instancia del objeto y así será posible guardar su estado.

Al contrario que en SingleCall, esta vez podemos cambiar el estado del objeto del servidor, ya que no se destruirá en ningún momento, y además podrán compartir el mismo objeto varios clientes.
-
Objetos activados en el cliente: Son iguales a los SingleCall pero con la diferencia de que los objetos guardan el estado en el servidor, es decir, el servidor guarda todos los objetos de los clientes.

Como podemos ver, cada cliente tiene su propio objeto en el servidor y cada uno conserva su propio estado.
2. Hacer que nuestra clase sea remota
Para que una clase se pueda compartir de forma remota, únicamente hará falta añadir la interfaz System.MarshalByRefObject a esa clase. Este nombre es muy intuitivo, significa que la clase se puede serializar (aplanar) por una referencia remota. Con referencia remota, queremos decir que en lugar de almacenar el objeto en memoria, se guardarán datos como la dirección, el puerto y otros para poder llegar hasta ese objeto que está en otra máquina. Así, si tenemos una referencia a esta clase, podremos usar sus servicios. Añadiendo esta interfaz, el código de nuestra calculadora debería quedar de la siguiente forma:
- // el código del anterior tutorial…
- public class Calculadora: MarshalByRefObject
- {
- // el código del anterior tutorial…
- }
- // el código del anterior tutorial…
Indice general de los manuales
- Introducción, instalación en Ubuntu y creación de una calculadora.
- Modos de compartición de objetos. Creando nuestra primera calculadora distribuida. « [Leyendo]
- Canales: TCP y HTTP. Configuración en archivo XML.
- Uso de interfaces para separar el código entre cliente y servidor.
