introducción elementos de.net remoting aplicación de ejemplo

26
Introducción Introducción a Remoting

Upload: gustavo-gamon

Post on 03-Feb-2015

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introducción Elementos de.Net Remoting Aplicación de ejemplo

Introducción

Introducción a Remoting

Page 2: Introducción Elementos de.Net Remoting Aplicación de ejemplo

Agenda

Introducción

Elementos de .Net Remoting

Aplicación de ejemplo

Page 3: 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.

Page 4: Introducción Elementos de.Net Remoting Aplicación de ejemplo

.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.

Page 5: Introducción Elementos de.Net Remoting Aplicación de ejemplo

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.

Page 6: Introducción Elementos de.Net Remoting Aplicación de ejemplo

Introducción

Remoting permite utilizar objetos o valores entre distintos application domains utilizando distintos protocolos

Page 7: Introducción Elementos de.Net Remoting Aplicación de ejemplo

.NET Remoting: Sinks

Page 8: Introducción Elementos de.Net Remoting Aplicación de ejemplo

.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.

Page 9: Introducción Elementos de.Net Remoting Aplicación de ejemplo

.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

Page 10: Introducción Elementos de.Net Remoting Aplicación de ejemplo

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

Page 11: Introducción Elementos de.Net Remoting Aplicación de ejemplo

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

Page 12: Introducción Elementos de.Net Remoting Aplicación de ejemplo

Ejemplo

Cliente Servidor

Cliente.exe Servidor.exe

TiposCompartidos.dll TiposCompartidos.dll

Page 13: Introducción Elementos de.Net Remoting Aplicación de ejemplo

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)

Page 14: Introducción Elementos de.Net Remoting Aplicación de ejemplo

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

Page 15: Introducción Elementos de.Net Remoting Aplicación de ejemplo

Creando “Remotable Type”

El tipo que se va a consumir remotamente debe heredar de MarshalByRefObject

El resto… es como una clase tradicional

Page 16: Introducción Elementos de.Net Remoting Aplicación de ejemplo

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;

}

}

Page 17: Introducción Elementos de.Net Remoting Aplicación de ejemplo

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

Page 18: Introducción Elementos de.Net Remoting Aplicación de ejemplo

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();

}

}

Page 19: Introducción Elementos de.Net Remoting Aplicación de ejemplo

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>

Page 20: Introducción Elementos de.Net Remoting Aplicación de ejemplo

Compilar

Crear el ejecutable Listener.exe y referenciar a la dll de tipos LibMat.dll

Page 21: Introducción Elementos de.Net Remoting Aplicación de ejemplo

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();

}

}

Page 22: Introducción Elementos de.Net Remoting Aplicación de ejemplo

Ejecutar la aplicación

Ejecutar Listener.exe

Ejecutar Cliente.exe

Page 23: Introducción Elementos de.Net Remoting Aplicación de ejemplo

.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...

Page 24: Introducción Elementos de.Net Remoting Aplicación de ejemplo

.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.

Page 25: Introducción Elementos de.Net Remoting Aplicación de ejemplo

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

Page 26: Introducción Elementos de.Net Remoting Aplicación de ejemplo

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…