introducción elementos de.net remoting aplicación de ejemplo
TRANSCRIPT
Introducción
Introducción a Remoting
Agenda
Introducción
Elementos de .Net Remoting
Aplicación de ejemplo
Introducción
Tecnología de objetos distribuidos sucesora de DCOM.
Objetivo: crear herramientas que faciliten la distribución de la aplicación en red de forma transparente.
Framework variado y extensible para que los objetos de distintos dominios de aplicaciones, procesos y equipos se puedan comunicar sin problemas.
Ideas fundamentales encontradas ya en CORBA o Java RMI, aunque la combinación final es algo diferente.
.NET Remoting: definiciones 1
Un AppDomain es el entorno donde se ejecuta la aplicación, por lo que la comunicación se dará entre distintos AppDomains, siendo un AppDomain el cliente y otro el servidor.
Un canal es la forma de ordenar, formatear o transmitir mensajes a través de AppDomains, de forma que nosotros podamos decir que queremos transmitir un mensaje bien por medio de un protocolo de transporte como el TCP o de aplicación como pudiese ser el HTTP o cualquier canal implementado por la arquitectura.
NET Remoting: definiciones 2
Un proxy es un objeto que se encarga de abstraer la comunicación entre cliente/servidor de forma que los objetos de otro AppDomain (remotos) parezcan locales.
Un sumidero (sink) es capaz de recibir mensajes de Remoting (IMessage), tratarlos y enviarlos al siguiente sumidero en la cadena de comunicación.
Introducción
Remoting permite utilizar objetos o valores entre distintos application domains utilizando distintos protocolos
.NET Remoting: Sinks
.Net Remoting: Cliente
Si se configura el cliente correctamente, podemos crear nuevas instancias de un objeto remoto:
−utilizando la sentencia “new”,
− recibiendo una referencia al objeto que reside en el servidor y
−ejecutando métodos/propiedades como si el objeto estuviese en el mismo proceso.
.Net Remoting: Servidor
El servidor necesita publicar un objeto
−Escuchar en un canal TCP o HTTP
−Tener un servicio con un nombre (Ej:ServicioMat)
−El cliente se conecta al ServicioMat utilizando un canal soportado y recibe una instancia
El cliente se conecta a un servidor en un puerto
El cliente especifica el objeto que desea
Ejemplo:
−Conectar al “servicioMat” en el servidor “X” utilizando el protocolo HTTP en el puerto 80
Objetos remotos
Tipos
−MarshalByRef
Referencia en el cliente, objeto en el servidor
−MarshalByVal
El cliente tiene una copia del objeto
Deben ser objetos serializables (ISerializable), ya que el objeto entero debe viajar al cliente
Activación y Ejecución
Activación
− Por Servidor
• SingleCall (Se instancia por cada llamada)
• Singleton (todos los clientes usan la misma instancia)
− Por Cliente
• Leasing
Ejecución
− Síncrona
− Asíncrona
• Con o sin retorno
Ejemplo
Cliente Servidor
Cliente.exe Servidor.exe
TiposCompartidos.dll TiposCompartidos.dll
Aplicación de ejemplo
El objeto remoto expone 2 métodos para sumar o restar 2 números
Debemos
−Tener una implementacion de un tipo remoto
−Un “Application domain” host que escuche
−Un “Application domain” cliente que invoque
−Configurar el sistema de remoting en cada parte del sistema (cliente y servidor)
Remoting: desarrollo
Escribir los componentes que se desea acceder remotamente y compilarlos en una dll (shared assembly)
Escribir un componente ejecutable que oficie de “host” de los objetos anteriores
Escribir los clientes que llamen al servidor
Creando “Remotable Type”
El tipo que se va a consumir remotamente debe heredar de MarshalByRefObject
El resto… es como una clase tradicional
LibMat.cs
using System;
public class LibMat : MarshalByRefObject
{
private int resultado; public int Sumar(int num1, int num2)
{
resultado = num1 + num2;
return resultado;
}
public int Restar(int num1, int num2)
{
resultado = num1 - num2;
return resultado;
}
}
Crear la aplicación de Servidor
La aplicación deberá escuchar las peticiones de los clientes para permitir crear los objetos remotos
Deberá
−Elegir y Registrar el canal (objeto que manejará los protocolos de red y los formatos de serialización)
−Registrar el componente de tipos remotos en .Net Remoting
Listener.cs
using System;
using System.Runtime.Remoting;
public class Listener
{
public static void Main()
{
RemotingConfiguration.Configure("Listener.exe.config");
Console.WriteLine (“Escuchando peticiones. Enter para salir..."); Console.ReadLine();
}
}
Listener.exe.config
<configuration>
<system.runtime.remoting>
<application>
<service>
<wellknown mode="Singleton” type=“LibMat, MathLibrary” objectUri="MathLibrary.rem"/>
</service>
<channels>
<channel ref="http" port="8989"/>
</channels>
</application>
</system.runtime.remoting>
</configuration>
Compilar
Crear el ejecutable Listener.exe y referenciar a la dll de tipos LibMat.dll
Client.cs
using System;
using System.Runtime.Remoting;
public class Cliente {
public static void Main()
{RemotingConfiguration.Configure("Cliente.exe.config");
MathLibrary lib = new MathLibrary();
Console.WriteLine("Número 1:");
string num1 = Console.ReadLine();
Console.WriteLine(“Número 2:");
string num2 = Console.ReadLine();
Console.WriteLine(lib.Sumar(Convert.ToInt16(num1),Convert.ToInt16(num2)).ToString());
Console.WriteLine (“Enter para salir...");
Console.ReadLine();
}
}
Ejecutar la aplicación
Ejecutar Listener.exe
Ejecutar Cliente.exe
.NET Remoting: alojamiento
Los objetos de servicios remotos .NET se pueden alojar en:
− Un ejecutable administrado: cualquier archivo .NET EXE normal o en un servicio administrado.
− IIS (Internet Information Server): los objetos reciben los mensajes a través del canal HTTP. Se debe crear una raíz virtual, en la que se copiará"remoting.config“. El ejecutable o la DLL que contiene el objeto remoto se debe colocar en el directorio “bin”, en el directorio al que señala la raíz de IIS.
− Servicios de componentes .NET: para aprovechar los diferentes servicios de COM+, tales como las transacciones, JIT, la agrupación de objetos, etc...
.NET Remoting: servicios del canal
System.Runtime.Remoting.Channels.
Facilitan el medio de transporte necesario para establecer estas comunicaciones.
Canales HTTP (protocolo SOAP) y TCP (carga binaria).
Se pueden conectar (a través de IChannel) utilizando canales personalizados en los que se puede escribir para permitir la integración de aplicaciones muy diversas.
Client-side remoting
Client calls method on TransparentProxy TransparentProxy builds message
−Stack frame to message TransparentProxy passes msg to RealProxy RealProxy forwards msg to envoy sink(s) Last envoy sink forwards msg to context sink(s) Last context sink forwards msg to channel sink(s) Channel sinks turn message into a byte stream Last channel sink sends byte stream to server
Remoting chain
TxSinkTx
Sink
EnvoySink
EnvoySink
Serverobject
EnvoySinks
Message
TransportSink
ChannelSink
ChannelSink
Channel TransportSink
ChannelSink
ChannelSink
Channel
TransparentProxy
RealProxy
ContextSinks
Client-side
Server-side
Message
FormatterSink
TxSink
TxSink
010110…
010110…