Introducción. Curso de Middleware. Práctica 5. 1 de 27
|
|
- Lorena Blanco Toledo
- hace 8 años
- Vistas:
Transcripción
1 Introducción Uno de los objetivos en el desarrollo de aplicaciones distribuidas es separar claramente el código que el servidor ofrece y el que el cliente utiliza. Las razones son múltiples y van desde razones de diseño típicas de orientación a objetos hasta razones de mercado (no nos interesa que los clientes tengan nuestro código). Para resolver este problema es necesario que el servidor publique un contrato que pueda utilizar el cliente. Históricamente, este contrato se ha definido utilizando un lenguaje propio llamado IDL (Lenguaje para la Descripción del Interfaz). Con este lenguaje, el fabricante del servidor escribía el contrato que podía suministrar. El cliente utilizaba este contrato para generar parte de su código. Si observamos nuestras prácticas, la librería que tenía la Calculadora (Calculo.dll) era común tanto al cliente como al servidor. Se compilaba y enlazaba en ambas aplicaciones. Con lo que hemos visto hasta la fecha podríamos preguntarnos si es posible separar al cliente del servidor y sobre todo si son necesarios o no dichos contratos en.net Remoting. Responder a estas preguntas es el objetivo de nuestra práctica. A lo largo de ella vamos a explorar varios mecanismos para la separación del código entre el cliente y el servidor. Curso de Middleware. Práctica 5. 1 de 27
2 Breve Historia Antes de meternos con las prácticas, me gustaría contaros una breve historia de la ingeniería del software. Y es que la ingeniería del software ha influido mucho en los paradigmas y diseño de los middleware. Al principio de los tiempos (más o menos por los años 1960) se produce un primer salto en la evolución. Uno de hecho muy importante: los programadores pasan de utilizar el ensamblador a usar lenguajes de alto nivel que deben ser compilados. Ejemplos representativos son COBOL o Fortran. Pronto se descubre que no todo es tan maravilloso como parece y se detectan problemas. El código está poco o nada estructurado, lo que convierte un programa en un monstruo difícil de mantener. Yo he llegado a ver un único programa de unas 15 páginas en Fortran (con sus GOTO)!!. No tarda en aparece una nueva generación. Por los años finales de los 60 o principios de los 70 nacen ya lenguajes de programación que refuerzan los conceptos de estructura (C o Pascal). De todas formas, la estructura es aún muy básica. La unidad de estructura es la función o procedimiento. Se empieza a pensar seriamente sobre la reutilización del código. En esta fecha tan temprana, lo único que podemos reutilizar es la función. Los sistemas distribuidos generan tecnologías acordes con esta filosofía y nace el RPC (llamada a procedimientos remotos). El principal problema que se detecta es que la lógica del código está fuertemente unida a los datos. Es necesario encapsular el código con sus datos. Y nace la orientación a objetos. En este nuevo paso, los programadores consiguen una nueva unidad de reutilización: la clase. Estamos sobre los años 1980 y aparecen nuevos lenguajes: Smalltalk y más tarde C++. Con el concepto de clase, los programadores pueden encapsular el código con sus datos, aislando los problemas. El mundo se ve como una jerarquía de clases que, de una forma ideal, representa nuestro mundo. Evidentemente, los sistemas distribuidos tienen que evolucionar y adaptarse a estos nuevos conceptos. El middlware evoluciona hacia la orientación a objetos, las primeras alternativas son CORBA y le siguen otras como.net Remoting. En paralelo (en algunos casos es previo) se exploran otras alternativas como los middlware orientados al mensaje, con sistemas de colas tipo MQSeries. Pero los problemas siguen estando. Sigue siendo difícil la reutilización de código y la integración de sistemas. El concepto de clase viene acompañado de los conceptos de herencia y jerarquía. Y estos conceptos son problemáticos para los sistemas distribuidos. No siempre se puede distribuir el código sin hacer visibles todos los niveles de la jerarquía y clases más básicas. Además, es complicado hacer que un programa escrito en Ada pueda ser utilizado por un programador de C++. Pero es que otros muchos de los problemas de distribución de código siguen sin solucionar, por ejemplo el versionado. Era necesario evolucionar hacia nuevos conceptos. Esta evolución ha sido menos abrupta que las anteriores y desemboca en el concepto de programación orientada al componente (Component-Oriented Programming). Los primeros intentos se producen sobre los años La idea es que los programadores acuerdan un cierto contrato que debe ser neutro al lenguaje y a la arquitectura interna del sistema. Se hacen relevantes los conceptos como IDL e interface. La unidad de reutilización es el interface. El programador puede hacer y distribuir tantas implementaciones como desee (incluso en Curso de Middleware. Práctica 5. 2 de 27
3 diferentes lenguajes de programación), siempre y cuando respete el contrato (interface). Cuando un cliente llama a un componente, se utiliza un protocolo neutro al lenguaje. Es decir, llamamos a los miembros del componente utilizando un protocolo determinado, incluso si en ambos lados de la llamada utilizamos el mismo lenguaje de programación. Ejemplos de estos sistemas son COM, DCOM, JavaBeans, etc. Espero que a estas alturas del curso, sepamos identificar muchos de estos conceptos en las prácticas que ya habéis realizado. Si tienes alguna dificultad, no dudes en comentarlo con vuestro profesor. Pero la historia no se queda aquí. Tras el esfuerzo que genera la idea de componente, los sistemas siguen teniendo problemas de reutilización de código. Y es que los ingenieros del software se encuentran una y otra vez con el mismo problema. Para reutilizar debemos separar (desacoplar) el código, pero la unión del código es lo que nos permite integrar aplicaciones y por lo tanto generar valor. Es un no puedo vivir contigo pero tampoco sin ti. Y de esta forma, el sistema evoluciona hacia las aplicaciones orientadas a servicios. De nuevo se hace un esfuerzo para reducir las dependencias y aislar las unidades de reutilización. Es el momento en el que el middleware toma una nueva variante: los servicios web; pero eso lo dejamos para otro ejercicio. El futuro está aún por escribir, pero hay una tendencia clara en la que el middleware desaparece y es el propio lenguaje el que ofrece la capacidad de distribuir la aplicación. Por ahora tenemos lenguajes paralelos ya establecidos. El propio C# ya incorpora alguna de esas características pero hay muchos más. Si tenéis tiempo mirad las propuestas de lenguajes cómo X10. El siguiente paso en toda esta evolución posiblemente sea que el lenguaje se haga responsable de toda la funcionalidad que suministra actualmente el middleware. Ya hay algunos experimentos en este sentido. Por ejemplo, usando Scala y Spark podemos procesar datos de forma distribuida (usando el modelo map/reduce). Existe una fuerte investigación en lenguajes funcionales distribuidos (por ejemplo Haskell distributido). Pero volvamos a nuestra práctica. El objetivo de toda esta historia era ilustrar que los sistemas distribuidos actuales suelen estar desacoplados. Y para ello es importante identificar y aislar el código que queremos distribuir y reutilizar. Hasta la fecha hemos compartido el código de nuestra calculadora tanto en el cliente como en el servidor. No parece nada positivo, visto todo lo anterior, no?. Intentemos poner algún remedio... Curso de Middleware. Práctica 5. 3 de 27
4 Utilización de Interface Uno de los problemas que estabamos describiendo es que necesitamos de un mecanismo que nos permita describir lo que hace una clase sin necesidad de dar el código de la misma. Antes de ver el concepto de interface, os propongo hacer una pequeña prueba. Arranca el servidor de nuestra primera práctica con la calculadora distribuida. Asegúrate que está arrancada sobre un canal http (en el fichero de configuración aparece el protocolo). Ahora, con un navegador intenta abrir la URL añadiendo al final?wsdl : maquina:numero de puerto/tu servicio?wsdl por ejemplo: Observa que cuando utilizamos?wsdl como parámetro de la url, se obtiene una descripción en XML de los objetos remotos que están siendo atendidos en esa url. Intenta analizar lo que ves. Cambia algo en tu calculadora y observa como la página refleja ese cambio. Este ejercicio lo volveremos a ver cuando estudiemos SOAP (Simple Object Access Protocol ). De hecho lo que sale por nuestro navegador es la descripción en WSDL (Web Services Description Language), un estándar del W3C. Esa descripción se corresponde con el contrato de nuestra calculadora. Es una forma de describir los servicios que ofrece nuestro objeto remoto. En este caso, estamos viendo WSDL que es una forma neutral basada en XML de describir el funcionamiento de una clase. Pero no es el único. Otra alternativa es el IDL ( Lenguaje de Definición de Interfaces ) muy utilizado en Corba y en algunos sistemas basados en Rmi. Un ejemplo de IDL sería: module HelloApp interface Hello string sayhello(); oneway void shutdown(); ; ; Una tercera alternativa es utilizar el propio lenguaje de programación. Muchos lenguajes tienen un mecanismo llamado interface que nos permite describir dicho contrato. Se dice que la clase que realmente desarrolla el código implementa el interface. Os proponemos como ejercicio diseñar un interface que se corresponda con los servicios que ofrecía nuestra clase de calculadora. Por ejemplo: Curso de Middleware. Práctica 5. 4 de 27
5 // ICalculadora.cs using System; namespace Calculo public interface ICalculadora double Suma(double izq, double dch); double Producto(double izq, double dch);... Y nuestra calculadora ahora se ve modificada de forma que implemente el interface: // Calculadora.cs using System; using Calculo; namespace CalculoConImplementacion public class Calculadora : MarshalByRefObject, ICalculadora... Nuestra intención es que el cliente sólo vea el interface, mientras que el servidor pueda trabajar con el código completo, es decir con la clase Calculadora. Para estar seguros que no usamos por error la clase Calculadora desde nuestro cliente hemos cambiado el nombre del paquete. El servidor únicamente tendremos que cambiarlo para que utilice el espacio de nombres CalculoConImplementación. Posiblemente tengas que cambiar los ficheros de configuración correspondientes. Si no sabes cómo hacerlo, no dudes en preguntar a tu profesor. El siguiente paso es modificar el código del cliente. Observad que no podemos utilizar el operador new como venía siendo nuestra costumbre. Dicho operador únicamente se puede utilizar con aquellas clases que son instanciables. Es decir, no podemos usarlo con interfaces o con clases abstractas. Por esta razón nos vemos obligados a utilizar en su lugar la función Activator.GetObject. El código del cliente quedará como sigue: Curso de Middleware. Práctica 5. 5 de 27
6 using System; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using Calculo; public class Cliente public static void Main (string[] args) Console.WriteLine("Creando la calculadora"); ICalculadora calc = (ICalculadora) Activator.GetObject( typeof(calculo.icalculadora), " Console.WriteLine("Prueba de suma 5+3=" + calc.suma(5.0,3.0).tostring()); Console.WriteLine("Prueba de producto 5*3=" + calc.producto(5.0,3.0)); Finalmente tenemos que modificar el proceso de compilación de forma que la librería común (Calculo.dll) sólo incluya el resultado de compilar ICalculadora. Lo que queremos crear es un combinado o solución que tenga cuatro proyectos. Es decir, : Un proyecto de tipo librería que tenga únicamente el fichero de código ICalculadora.cs. Nuestra librería podría llamarse Calculo.dll. Un proyecto de tipo librería que tenga la implementación del interface, es decir, tiene el fichero de código Calculadora.cs. La librería podría llamarse CalculoImpl.dll. Este proyecto depende del anterior (edita las referencias a incluir) Un proyecto de tipo ejecutable con el código del cliente. Contiene el fichero de código Cliente.cs y depende de la librería Calculo.dll. El ejecutable podría llamarse Cliente.exe. Un proyecto de tipo ejecutable con el código del servidor ( Servidor.cs ) que genera Servidor.exe. Este proyecto utiliza o depende de las librerías Calculo.dll y CalculoImpl.dll Observa que el cliente utiliza o depende de una única librería y en esa librería NO hay código ejecutable, únicamente el interface ( ICalculadora ). El servidor en cambio depende de las dos librerías (la que tiene el interface y la que tiene la implementación). Curso de Middleware. Práctica 5. 6 de 27
7 Es un buen momento para que tu profesor os cuente conceptos de teoría. No avances en la práctica hasta asegurarte que has entendido correctamente los objetivos de la misma!!!!. Antes de seguir, volvemos con nuestras preguntas habituales: Sabes la diferencia entre clase (normal), clase abstracta e interface?. Sabes cuando elegir uno u otro? Por qué no podemos hacer un new de una clase abstracta? Por qué tampoco lo podemos hacer un interface? En cambio si hacemos un new de una clase concreta, podemos asignarla a una variable declarada usando el interface. Tiene sentido? Aunque pudiera ser legal, Es normal hacer estas cosas?. Por ejemplo: ImyInterface variable = new ConcreteClass(); Los lenguajes de programación tipo Java o C# prohíben la herencia múltiple, pero dejan que una clase implemente varios interfaces. Intenta explicar las razones de tal decisión. Compara el interface de C# con el WSDL del servicio. Puedes ver ventajas o inconvenientes?. El interface lo escribe el programador (lo mismo que el IDL), pero Quién escribe el WSDL?. y sobre todo, Cómo se escribe? Podríamos tener una solución tan transparente en C++? El concepto de especificación (por ejemplo el.h de C++) es similar al concepto de interface en Java o C#? Cuando hemos introducido el concepto de interface hemos dejado de utilizar el operador new. Sabemos las razones?. Qué nos implica? Sabemos que el objeto calc es de tipo ICalculadora y por lo tanto parece que no tiene código (no tiene implementación). Pero se utiliza habitualmente (por ejemplo con calc.suma(..) ). Sabrías decir qué es lo que se ejecuta?. Es posible que estemos ejecutando un interface?. Con este ejemplo, hemos podido comprobar cómo utilizar los interfaces para separar el código entre el cliente y el servidor. A continuación veremos que también podemos utilizar clases abstractas. Curso de Middleware. Práctica 5. 7 de 27
8 Clases Abstractas Cuando, por alguna razón, no es posible suministrar un interface, una alternativa es crear una clase abstracta y hacer que la clase remota derive de la misma. En este caso, la forma de proceder es muy similar a la del interface por lo que apenas se darán breves pinceladas de cómo se harían. Una clase abstracta es una clase que no desarrolla todas las funciones que la componen, dejando algunas para que sean implementadas por las clases que hereden de ellas. En C# la clase abstracta de la Calculadora sería: using System; namespace Calculo public abstract class CalculadoraAbstract : MarshalByRefObject public abstract double Suma(double izq, double dch); public abstract double Producto(double izq, double dch); Dado que en C# no existe herencia múltiple, la clase Calculadora no podría heredar a la vez de CalculadoraAbstract y de MarshalByRefObject. Para evitar ese problema hemos hecho que la calculadora abstracta ya derive de MarshalByRefObject. Una clase abstracta tiene el mismo problema que el interface a la hora de crear nuestro objeto remoto con el operador new y nos veremos obligados a usar de nuevo la función GetObject. El resto de la práctica se deja como ejercicio al alumno ya que apenas hay diferencias con el método del interface. Sigamos recorriendo las posibles alternativas para separar el cliente y el servidor. A veces no es posible utilizar las técnicas anteriores. En esos casos, tendremos que recurrir a la posibilidad descrita en el siguiente ejercicio. Curso de Middleware. Práctica 5. 8 de 27
9 Usando una clase. No nos dejemos engañar por el título de este ejercicio. No se trata de volver a hacer lo que ya vimos en los primeros ejercicios. Lo que propone esta técnica es utilizar una clase vacía en lugar de un interface o de una clase abstracta. Por vacía lo que queremos decir es que debemos crear una clase que, aunque completa, no incorpore el código que implementa el cuerpo de las funciones. Mejor lo vemos con un ejemplo: using System; namespace Calculo public class Calculadora: MarshalByRefObject public virtual double Suma (double izq, double dch) throw new NotImplementedException (); dch) public virtual double Producto (double izq, double throw new NotImplementedException (); Esta clase es la que haremos pública y será la que pueda utilizar el cliente. En cambio, el servidor deberá utilizar una versión completa de la calculadora. Por ejemplo: Curso de Middleware. Práctica 5. 9 de 27
10 using System; namespace PaqueteServidor public class CalculadoraCompleta : Calculo.Calculadora public CalculadoraCompleta() Console.WriteLine("Estoy en el constructor"); public override double Suma(double izq, double dch) Console.WriteLine("Estoy sumando"); return izq+dch; dch) public override double Producto(double izq, double Console.WriteLine("Estoy multiplicando"); return izq*dch; Como en los ejercicios anteriores, hemos cambiado el nombre de espacios para no generar dudas en la utilización del cliente. Observad que las funciones las hemos declarado virtual en la calculadora vacía y override en la calculadora completa. Es la forma que tiene C# de asegurar que el programador no cometa errores accidentales. Le obliga a declarar las funciones que quiere sobreescribir. Si tienes dudas sobre los conceptos de sobrecarga (overload) y sobreescritura (override) pregunta a tu profesor. El segundo es muy relevante para los middleware. Los cambios en el servidor son mínimos: Curso de Middleware. Práctica de 27
11 using System; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels;... using Calculo; using PaqueteServidor; public class Servidor public static void Main (string[] args)... RemotingConfiguration.RegisterWellKnownServiceType( typeof(paqueteservidor.calculadoracompleta), "Calculadora.remota", WellKnownObjectMode.Singleton);... La diferencia en nuestro cliente es que ahora ya podemos volver a usar el operador new puesto que ahora tenemos una clase instanciable (aunque aparentemente poco útil): Curso de Middleware. Práctica de 27
12 using System; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using Calculo; public class Cliente public static void Main (string[] args) RemotingConfiguration.RegisterWellKnownClientType( typeof(calculo.calculadora), "tcp://localhost:1234/calculadora.remota" ); Console.WriteLine("Creando la calculadora"); Calculadora calc = new Calculadora(); Console.WriteLine("Prueba de suma 5+3=" + calc.suma(5.0,3.0)); Console.WriteLine("Prueba de producto 5*3=" + calc.producto(5.0,3.0)); Esta última técnica puede parecernos un tanto extraña. Lo primero que debería llamarnos la atención es que no se levanta la excepción NotImplementedException. Al fin y al cabo, es la calculadora que hemos creado y es lo que hace la función a la que hemos llamado, no? Por otra parte, puede parecernos poco útil crear una clase vacía cuando ya hemos visto las alternativas del interface o la clase abstracta. Hemos incluido esta alternativa principalmente para hacernos reflexionar sobre como funciona el operador new y entender.net Remoting. Es un buen momento para que tu profesor os cuente conceptos de teoría. No avances en la práctica hasta asegurarte que has entendido correctamente los objetivos de la misma!!!!. Pero antes de seguir, vamos a pararnos un segundo: Qué ventaja o inconvenientes puedes ver sobre los tres casos de separación que hemos visto? Me refiero a la utilización del interface, de una clase abstracta y de una clase vacía. Si sabes Corba, Se pueden utilizar estas alternativas? Puedes justificar la respuesta? De este último ejemplo, parece que el sistema no instancia una Curso de Middleware. Práctica de 27
13 calculadora en local o si lo hace, no la utiliza. Antes de seguir, intenta dar una explicación. Incluso, haz un esquema (tipo UML o uno de tu cosecha) sobre tu explicación. En la introducción hemos visto que los programadores intentan separar el contrato ( interface ) de la implementación. Crees que se ha conseguido con las alternativas anteriores? Si desarrollamos un servicio/componente que queremos poner a disposición al mundo entero, que alternativa tienes para distribuir el contrato? Es decir, cómo le dirías al mundo entero que tu calculadora sabe sumar? Es WSDL una solución? Qué sería mejor WSDL, interface, clase abstracta o clase vacía? La pregunta que deberíamos habernos hecho a estas alturas es cómo el operador new es capaz de crear unas veces objetos locales y otras veces objetos remotos. Hemos visto cómo el mismo operador genera una cosa u otra dependiendo de la configuración de nuestra aplicación. Este comportamiento debería sorprendernos aún más al observar que no es posible redefinir dicho operador. Otros lenguajes nos permiten redefinir operadores y entre ellos el operador new. En C# podemos redefinir algunos operadores, por ejemplo los matemáticos (+, -, /, etc.) pero no podemos redefinir el operador new. La solución a este misterio es muy compleja y necesitaríamos profundizar bastante en los interiores de.net. Para entender mejor estas características hemos preparado una práctica especifica sobre AOP en C#. Antes de continuar con otros aspectos de.net Remoting vamos a ver una herramienta que puede ser útil para realizar el objetivo de nuestra práctica: separar el código entre el cliente y el servidor. Curso de Middleware. Práctica de 27
14 Proxys Supongamos que tenemos un servicio remoto de tanta aceptación que resulta complejo distribuir nuestro interfaz o clase abstracta por todo el mundo. Lo ideal sería que nuestros clientes pudieran generar el código a partir de dicha información, no?. Pues eso es lo que intenta hacer las herramientas incorporadas en el Visual Studio. También Mono dispone de una herramienta similar, aunque su funcionamiento es ligeramente diferente. Aseguraros que tenéis un servidor arrancado con tcp o http, aunque os recomendamos http ya que podréis ver el wsdl desde el navegador. Un ejemplo de WSDL sería: Desde el Visual Studio añadir una referencia de servicio. El nombre puede cambiar de una versión a otra, pero lo hacemos pulsando el botón derecho sobre referencias en el proyecto. Cuando se abra el menú contextual seleccionamos la opción añadir referencia de servicio. Curso de Middleware. Práctica de 27
15 A continuación, se abrirá una pantalla para introducir datos. Cuando nos pida la url, debemos incluimos nuestra url (incluyendo?wsdl ) para indicar el esquema del servicio. En la pantalla aparecerá información sobre los servicios ofrecidos por la calculadora. Curso de Middleware. Práctica de 27
16 Antes de pulsar Ok aseguraros que hemos cambiado el nombre del namespace a algo que nos recuerde que es nuestra calculadora. En el ejemplo anterior, yo he puesto Calculo. El siguiente paso es construir el código del cliente que llame a un método de la calculadora. Por ejemplo, os propongo algo del siguiente estilo: Curso de Middleware. Práctica de 27
17 using System; using System.Threading; using Cliente.Calculo; namespace Cliente class Program public static void Main(string[] args) Thread.Sleep(2 * 1000); // Esto es para darle tiempo al servidor a que arranque Console.WriteLine("Esto es una prueba de calculadora"); CalculadoraPortTypeClient calc = new CalculadoraPortTypeClient(); Console.WriteLine("La suma de es : " + calc.suma(2.0, 3.0)); Console.WriteLine("Pulse Enter para salir..."); Console.ReadLine(); Y cuando ejecutemos nuestro cliente, podremos observar que el servicio ha funcionado correctamente: Curso de Middleware. Práctica de 27
18 Si nuestro servidor aún conserva la traza, deberíamos haber visto una traza en el servidor indicando que va a sumar. Lo que hemos hecho es construir un proxy usando la información que nos ha llegado desde WSDL. Antes de seguir deberías mirar el concepto de patrón proxy. Si no encuentras documentación en la red, pregunta a tu profesor. La siguiente gráfica, extraída de la wikipedia, representa dicho patrón en UML: Este concepto es importante, ya que lo que la herramienta está generando es de hecho un tipo muy particular de proxy. Este patrón de una forma u otra se utiliza en la mayoría de los middleware. Por ejemplo, en Corba es un concepto fundamental y lo veremos en su práctica correspondiente. Si quieres ver lo que se ha generado en el Visual Studio, haz lo siguiente. En la vista de clases, selecciona algún elemento relacionado con la calculadora y pide ir a definición, según la siguiente pantalla: Curso de Middleware. Práctica de 27
19 Eso nos abrirá el código de nuestro proxy. En el ejemplo anterior se llama Reference.cs. No será un código fácil de entender. No está pensado para que lo procesen los humanos ya que es un código generado y mantenido automáticamente. El código generado sería algo parecido a lo siguiente (también es posible que cambie según la versión). Solo incluimos una parte para nuestra curiosidad, pero la totalidad del código puede ser algo abrumador. Curso de Middleware. Práctica de 27
20 public double Suma(double izq, double dch) Cliente.Calculo.SumaRequest invalue = new Cliente.Calculo.SumaRequest(); invalue.izq = izq; invalue.dch = dch; Cliente.Calculo.SumaResponse retval = ((Cliente.Calculo.CalculadoraPortType)(this)).Suma(inValue); return retval.@return; [System.ComponentModel.EditorBrowsableAttribute(System.ComponentM odel.editorbrowsablestate.advanced)] System.Threading.Tasks.Task<Cliente.Calculo.SumaResponse> Cliente.Calculo.CalculadoraPortType.SumaAsync(Cliente.Calculo.Sum arequest request) return base.channel.sumaasync(request); public System.Threading.Tasks.Task<Cliente.Calculo.SumaResponse> SumaAsync(double izq, double dch) Cliente.Calculo.SumaRequest invalue = new Cliente.Calculo.SumaRequest(); invalue.izq = izq; invalue.dch = dch; return ((Cliente.Calculo.CalculadoraPortType) (this)).sumaasync(invalue); Si nos fijamos en el código observamos que se corresponde con un proxy de cliente. Esto es, el código que se inserta cuando creamos un objeto remoto en el cliente. Esta técnica de generación de proxys es muy habitual y es una alternativa a otras que veremos a lo largo del curso. Es un buen momento para que tu profesor os cuente conceptos de teoría. No avances en la práctica hasta asegurarte que has entendido correctamente los objetivos de la misma!!!!. Por ahora, vamos a intentar afianzar algunos conceptos de teoría, revisando nuestros conocimientos de un proxy : Curso de Middleware. Práctica de 27
21 Qué es un patrón proxy en la programación tradicional? Y un Firewall-proxy en el mundillo de las redes?. Podríamos decir que es lo mismo? Busca en la red alguna definición de un patrón proxy. Qué relación tienen los conceptos de la pregunta anterior con lo que genera la herramienta y que también hemos llamado proxy?. Mira la gráfica de UML anterior. Es un gráfico de un patrón que no refleja los objetos distribuidos. Sabrías decir qué elementos de la gráfica están en cliente y cuáles en el servidor?. Intenta buscar una implementación en algún lenguaje conocido como java o C#. Se parece a lo que hemos hecho hasta la fecha con nuestra calculadora?. Seguramente no demasiado, Verdad?. No es tan visible, ya que es el middleware quien genera el proxy de forma automática. En la gráfica UML aparece el interface de una clase. Significa eso que no estábamos utilizando el concepto de proxy en nuestras primeras prácticas? Me refiero a las prácticas iniciales en las que no había interfaces, clases abstractas o similares. Revisa el código que has programado para este curso, A qué clase o clases crees que se asocia el elemento RealSubject que aparece en el UML? Compara las dos gráficas de este capítulo (la del proxy y la de los canales). Puedes ver su conexión? No es trivial y lo mejor es que le pidas a tu profesor que os lo explique. No vamos a profundizar mucho más en el código, pero os animamos a que exploréis algunos de las técnicas utilizadas. Por ejemplo, observar cómo se hacen llamadas asíncronas en el proxy. O cómo se retornan Tareas (threads ligeros) en algunos de los métodos. Si os parece interesante, pide a tu profesor que te amplíe estos conceptos. Este último ejercicio nos ha demostrado la capacidad de Remoting para generar automáticamente el proxy y de publicar las característica de un servicio sin necesidad de intercambiar IDL o interfaces. Existe además otra herramienta denominada wsdl disponible tanto en Mono como en.net de Microsoft. Esta herramienta genera el código necesario para conectar con servicios web (usando SOAP). Aunque esta herramienta estará obsoleta por la aparición de la Windows Communication Fundation, merece la pena dedicarle un rato a la herramienta y por ello os proponemos el siguiente ejercicio. Nota: la herramienta wsdl.exe se suele encontrar en un directorio llamado C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin o similar. Curso de Middleware. Práctica de 27
22 Ejercicio con Servicios Web Os proponemos el siguiente ejercicio. Mirad la siguiente url: Esta url contiene un número considerable de servicios web. Podemos ver y utilizar muchos de ellos. Para la realización de esta práctica yo tomé uno llamado TempConvert pero es posible que cuando hagamos la práctica no esté disponible. Elige cualquier otro que veas disponible (aparecerá en color verde). Si finalmente no pudieras acceder a algún servicio web, siempre podrás realizarla con un servicio web hecho por tí. Hacer uno no es muy complicado si utilizas JavaEE o WCF. Podemos ver el api para conectar con los servicios. En nuestro ejemplo está en: Para generar el código de la librería repetiremos los pasos anteriores (añadir referencia externa). Curso de Middleware. Práctica de 27
23 El siguiente paso es hacer un programa que utilice dicha librería y que conecte con el servidor. Por ejemplo, el siguiente código utiliza dicho servicio: Curso de Middleware. Práctica de 27
24 using System; using System.Threading; using Cliente.Calculo; using Cliente.Temperatura; using System.ServiceModel; namespace Cliente class Program public static void Main(string[] args) Thread.Sleep(2 * 1000); // Esto es para darle tiempo al servidor a que arranque Console.WriteLine("Esto es un ejemplo de Web Service"); Cliente.Temperatura.TempConvertSoapClient tempserv = new TempConvertSoapClient("TempConvertSoap"); Console.WriteLine("CelsiusToFahrenheit responde con : " + tempserv.celsiustofahrenheit("25")); Console.WriteLine("Pulse Enter para salir..."); Console.ReadLine(); Si lo ejecutamos podremos ver algo similar a: Curso de Middleware. Práctica de 27
25 Interesante!!, verdad? Busca algún otro servicio web de la red, o utiliza alguno que hayas programado para esta u otra asignatura. Si no encuentras nada, pide a un compañero que te cree un servidor que publique un WDSL. Repite el proceso anterior y comprueba que puedes hacer un programa C# que dialogue con el servicio en pocas líneas de código. Es un buen momento para que tu profesor os cuente conceptos de teoría. No avances en la práctica hasta asegurarte que has entendido correctamente los objetivos de la misma!!!!. Este ejemplo último es interesante. Veamos algunas preguntas: Hemos visto varios métodos para separar el contrato de la implementación. Desde usar interfaces hasta usar clases abstractas, etc. Cuál es el método que hemos usado para conectarnos a Google?. Cómo nos hemos informado sobre las características del servicio de Google? Un aspecto interesante es que hemos hablado con un servidor remoto sin apenas saber nada de la arquitectura del mismo. No sabemos nada del S.O., tipo de máquinas, lenguajes de programación utilizados, etc. Cómo ha sido posible? Curso de Middleware. Práctica de 27
26 Ejercicio Con todo lo visto en esta práctica, ahora te proponemos aplicarlo al servidor de nombres que construimos en la práctica anterior. Modifica la práctica anterior para separar el código del cliente del servidor. Prueba con algunas alternativas y observa su funcionamiento. Y no te olvides del rendimiento. También prueba a generar el wsdl. Cuando termines, muestra tu trabajo al profesor. Curso de Middleware. Práctica de 27
27 Resumen Al principio de esta práctica nos planteamos la duda de cómo separar el código cliente del servidor. Incluso surgió la pregunta de si era necesario un lenguaje tipo IDL. A lo largo de la misma hemos visto algunos de los mecanismos que nos permiten separar el código entre uno y otro. Hemos comprobado que incluso podemos generar el código del cliente a partir de la meta información que el propio servidor publica. Podemos pensar que el WSDL hace la misma función que el IDL, pero la diferencia en Remoting es que el esquema también funciona en el sentido contrario: se genera a partir de código. Esto es posible por la capacidad de reflexión que tiene la plataforma (Reflexión es una propiedad de los lenguajes de programación que permite por programa interrogar las propiedades del propio código). Curso de Middleware. Práctica de 27
Curso de Java POO: Programación orientada a objetos
Curso de Java POO: Programación orientada a objetos Luis Guerra Velasco Curso INEM 02830. Programación en Java Marzo 2010 Índice 1 Introducción a la POO 2 Herencia y polimorfismo 3 Empaquetado de proyectos
Más detallesEscritorio remoto y VPN. Cómo conectarse desde Windows 7
Escritorio remoto y VPN. Cómo conectarse desde Windows 7 Hay ocasiones en las que es necesario conectarnos a un equipo informático situado a mucha distancia de donde nos encontramos para realizar sobre
Más detallesGuía de uso del Cloud Datacenter de acens
guíasdeuso Guía de uso del Cloud Datacenter de Calle San Rafael, 14 28108 Alcobendas (Madrid) 902 90 10 20 www..com Introducción Un Data Center o centro de datos físico es un espacio utilizado para alojar
Más detallesUNIDAD 1. LOS NÚMEROS ENTEROS.
UNIDAD 1. LOS NÚMEROS ENTEROS. Al final deberás haber aprendido... Interpretar y expresar números enteros. Representar números enteros en la recta numérica. Comparar y ordenar números enteros. Realizar
Más detallesCreación y administración de grupos de dominio
Creación y administración de grupos de dominio Contenido Descripción general 1 a los grupos de Windows 2000 2 Tipos y ámbitos de los grupos 5 Grupos integrados y predefinidos en un dominio 7 Estrategia
Más detallesMANUAL DE AYUDA TAREA PROGRAMADA COPIAS DE SEGURIDAD
MANUAL DE AYUDA TAREA PROGRAMADA COPIAS DE SEGURIDAD Fecha última revisión: Diciembre 2010 Tareas Programadas TAREAS PROGRAMADAS... 3 LAS TAREAS PROGRAMADAS EN GOTELGEST.NET... 4 A) DAR DE ALTA UN USUARIO...
Más detallesPLANTILLAS DE DOCUMENTOS EN WORD 2007
1 PLANTILLAS DE DOCUMENTOS EN WORD 2007 Introducción Una plantilla es un modelo o patrón para crear nuevos documentos. En una plantilla se guarda internamente el formato utilizado, es decir, el estilo
Más detalles5. Composer: Publicar sus páginas en la web
5. Composer: Publicar sus páginas en la web Si nuestras páginas existen únicamente en el disco duro local, sólo nosotros podremos navegar por ellas, pero nadie más podrá hacerlo. Composer nos permite publicarlas
Más detallesDepartamento CERES Área de Tarjetas Inteligentes Manual de Usuario
14 CORREO SEGURO. Hay aplicaciones de correo que permiten enviar y recibir correos cifrados y firmados digitalmente utilizando criptografía. Estas operaciones garantizan el intercambio seguro de información,
Más detallesCITRIX 4.5 - Citrix Application Streaming
1 de 39 01/12/2007 1:06 CITRIX 4.5 - Citrix Application Streaming Es la caracteristica principal de la versión 4.5 de Citrix, el Application Streaming, en este documento se explica cómo usarlo. Application
Más detallesApp para realizar consultas al Sistema de Información Estadística de Castilla y León
App para realizar consultas al Sistema de Información Estadística de Castilla y León Jesús M. Rodríguez Rodríguez rodrodje@jcyl.es Dirección General de Presupuestos y Estadística Consejería de Hacienda
Más detallesMANUAL BASICO DE WEBEX
MANUAL BASICO DE WEBEX Webex es un servicio de web conferencias y soluciones de colaboración, lo que significa que nos permite crear una conferencia por internet en la cual además de vernos los unos a
Más detallesAGREGAR UN EQUIPO A UNA RED Y COMPARTIR ARCHIVOS CON WINDOWS 7
Tutoriales de ayuda e información para todos los niveles AGREGAR UN EQUIPO A UNA RED Y COMPARTIR ARCHIVOS CON WINDOWS 7 Como agregar a una red existente un equipo con Windows 7 y compartir sus archivos
Más detallesUnidad Didáctica 12. La publicación
Unidad Didáctica 12 La publicación Contenido 1. Desarrollar y explotar 2. Definición del Sitio 3. Alojar nuestra primera página Web 4. Configurar la conexión FTP U.D. 12 La publicación 1. Desarrollar y
Más detallesTutorial DC++ Usarlo es muy sencillo y configurarlo también, aunque tiene algunos trucos importentes.
Tutorial DC++ Para compartir, lo mejor es usar el DC++, que es un programa de intercambio P2P (como el emule) pero optimizado para usarlo en redes locales. Usarlo es muy sencillo y configurarlo también,
Más detallesCOMO CREAR UNA PÁGINA WEB 2-INTRODUCCIÓN A DREAWEAVER
2011 2012 COMO CREAR UNA PÁGINA WEB 2-INTRODUCCIÓN A DREAWEAVER WWW.FAUBELL.COM vicente@faubell.com Hasta ahora hemos visto una pequeña introducción a la creación de las páginas web. No te preocupes por
Más detallesProyecto MONO. Juantomás García. 1. Introducción. GNOME Hispano juantomas@lared.es
Juantomás García GNOME Hispano juantomas@lared.es Qué es el proyecto MONO?. Estado actual del proyecto. Por qué es interesante para el software libre disponer de la tecnología relacionado con el proyecto
Más detallesGUÍA DE USUARIO: GOOGLE DRIVE
GUÍA DE USUARIO: GOOGLE DRIVE Google Drive es una herramienta telemática de la web 2.0 que permite el trabajo virtual de forma colaborativa. En Google Drive podemos encontrar una barra de navegación en
Más detallesManual de uso de la plataforma para monitores. CENTRO DE APOYO TECNOLÓGICO A EMPRENDEDORES -bilib
Manual de uso de la plataforma para monitores CENTRO DE APOYO TECNOLÓGICO A EMPRENDEDORES -bilib [Manual de uso de la plataforma para monitores] 1. Licencia Autor del documento: Centro de Apoyo Tecnológico
Más detallesTutorial del administrador de la web del departamento
Tutorial del administrador de la web del departamento Antes de leer este tutorial, debes leer el tutorial del profesor. Observa que en la parte inferior de la página de INICIO de tu departamento aparece
Más detallesPrograma diseñado y creado por 2014 - Art-Tronic Promotora Audiovisual, S.L.
Manual de Usuario Programa diseñado y creado por Contenido 1. Acceso al programa... 3 2. Opciones del programa... 3 3. Inicio... 4 4. Empresa... 4 4.2. Impuestos... 5 4.3. Series de facturación... 5 4.4.
Más detallesMANUAL DE AYUDA MODULO TALLAS Y COLORES
MANUAL DE AYUDA MODULO TALLAS Y COLORES Fecha última revisión: Enero 2010 Índice TALLAS Y COLORES... 3 1. Introducción... 3 CONFIGURACIÓN PARÁMETROS TC (Tallas y Colores)... 3 2. Módulos Visibles... 3
Más detallesCOMO CONFIGURAR UNA MAQUINA VIRTUAL EN VIRTUALBOX PARA ELASTIX
COMO CONFIGURAR UNA MAQUINA VIRTUAL EN VIRTUALBOX PARA ELASTIX En este manual se presenta el proceso de configuración de una Maquina Virtual en VirtualBox, que será utilizada para instalar un Servidor
Más detallesHostaliawhitepapers. Las ventajas de los Servidores dedicados. www.hostalia.com. Cardenal Gardoki, 1 48008 BILBAO (Vizcaya) Teléfono: 902 012 199
Las ventajas de los Servidores dedicados Cardenal Gardoki, 1 48008 BILBAO (Vizcaya) Teléfono: 902 012 199 www.hostalia.com A la hora de poner en marcha una aplicación web debemos contratar un servicio
Más detallesCreando una webquests
Creando una webquests 1. LO PRIMERO EL PROGRAMA Para crear paginas web necesitamos el software apropiado. Hay muchas formas y programas para hacerlo, pero por su facilidad de uso y por ser software libre
Más detalles2.2.- Paradigmas de la POO
2.2.- Paradigmas de la POO Los principios propios de la orientación a objetos son: 2.2.1.- Abstracción de Datos 2.2.2.- Encapsulamiento 2.2.3.- Ocultamiento 2.2.4.- Herencia 2.2.5.- Polimorfismo Cualquier
Más detallesToda base de datos relacional se basa en dos objetos
1. INTRODUCCIÓN Toda base de datos relacional se basa en dos objetos fundamentales: las tablas y las relaciones. Sin embargo, en SQL Server, una base de datos puede contener otros objetos también importantes.
Más detallesCrear presentaciones con Impress de OpenOffice
Pintura de Acción. Expresionismo abstracto: Resinas acrílicas y píxeles en la Web 2.0. Aprender y compartir con blogs, podcasts, videos, en la Red como plataforma Crear presentaciones con Impress de OpenOffice
Más detallesGVisualPDA Módulo de Almacén
GVisualPDA Módulo de Almacén GVisualPDA es una aplicación para Windows Mobile 5/6 que amplía más aún las posibilidades de integración del software de gestión GVisualRec permitiendo estar conectados en
Más detallesAdaptación al NPGC. Introducción. NPGC.doc. Qué cambios hay en el NPGC? Telf.: 93.410.92.92 Fax.: 93.419.86.49 e-mail:atcliente@websie.
Adaptación al NPGC Introducción Nexus 620, ya recoge el Nuevo Plan General Contable, que entrará en vigor el 1 de Enero de 2008. Este documento mostrará que debemos hacer a partir de esa fecha, según nuestra
Más detallesInstalación de Microsoft Virtual PC
Instalación de Microsoft Virtual PC Virtual PC es un software de Microsoft que permite instalar varios sistemas operativos en la misma máquina, sin tener que reiniciar Windows y además de forma segura,
Más detallesInstalar protocolo, cliente o servicio nuevo. Seleccionar ubicación de red. Práctica - Compartir y conectar una carpeta
Configuración de una red con Windows Aunque existen múltiples sistemas operativos, el más utilizado en todo el mundo sigue siendo Windows de Microsoft. Por este motivo, vamos a aprender los pasos para
Más detallesMANUAL DE USUARIO APLICACIÓN SYSACTIVOS
MANUAL DE USUARIO APLICACIÓN SYSACTIVOS Autor Edwar Orlando Amaya Diaz Analista de Desarrollo y Soporte Produce Sistemas y Soluciones Integradas S.A.S Versión 1.0 Fecha de Publicación 19 Diciembre 2014
Más detallesVisual Studio 2008 es el conjunto de herramientas de
1. VISUAL STUDIO 2008 Visual Studio 2008 es el conjunto de herramientas de desarrollo y programación creado por Microsoft tanto para aplicaciones Windows como aplicaciones web. La aparición de Visual Studio
Más detallesCurso Internet Básico - Aularagon
Antes de empezar es necesario que tengas claro algunas cosas: para configurar esta cuenta de correo, debes saber que el POP y el SMTP en este caso son mail.aragon.es; esta cuenta de correo hay que solicitarla
Más detallesEl e-commerce de Grupo JAB es una herramienta que permite a los clientes del Grupo, realizar un amplio conjunto de servicios de consulta, petición y
El de Grupo JAB es una herramienta que permite a los clientes del Grupo, realizar un amplio conjunto de servicios de consulta, petición y compra en los diversos almacenes del Grupo JAB. En concreto podremos:
Más detalles3º Grado Educación Infantil Bilingüe Números. Método Singapur y F. Bravo E R
MATEMÁTICAS PARA EDUCACIÓN INFANTIL N Enseñamos y aprendemos llos números:: Método Siingapur y Fernández Bravo,, Porr Clarra Garrcí ía,, Marrtta Gonzzál lezz y Crri isstti ina Lattorrrre.. Ú M E R O S
Más detallesPráctica 3: Estudio de los protocolos HTTP, SMTP, POP3 e IMAP mediante un analizador de red: Wireshark
FUNDAMENTOS DE REDES DE COMPUTADORES Curso 2009/2010 Práctica 3: Estudio de los protocolos HTTP, SMTP, POP3 e IMAP mediante un analizador de red: Wireshark Introducción En esta práctica vamos a trabajar
Más detallesUso de Visual C++ Pre-Practica No. 3
Pre-Practica No. 3 Uso de Visual C++ Microsoft Visual C++ 2010 es una versión de Visual Studio específica para el lenguaje de programación C++. Es un entorno de desarrollo muy completo y profesional. Por
Más detallesSoftware de Comunicaciones. Práctica 7 - Secure Shell. SSH
Software de Comunicaciones Práctica 7 - Secure Shell. SSH Juan Díez-Yanguas Barber Software de Comunicaciones Ingeniería Informática - 5º Curso Jdyb - Mayo 2013 Juan Díez- Yanguas Barber Práctica 7 Índice
Más detallesInstalar y configurar W3 Total Cache
Instalar y configurar W3 Total Cache en WordPress Cardenal Gardoki, 1 48008 BILBAO (Vizcaya) Teléfono: 902 012 199 www.hostalia.com La velocidad de carga de una web influye mucho a la hora de mejorar el
Más detallesÍTEMS DEL MENÚ CREACIÓN Y GESTIÓN (Última revisión: lunes, 9 de marzo de 2009)
JOOMLA! ÍTEMS DEL MENÚ CREACIÓN Y GESTIÓN (Última revisión: lunes, 9 de marzo de 2009) Es necesario comentar que este manual ha sido diseñado en su mayor parte por comunidadjoomla.org. Este manual es una
Más detallesPLANTILLAS EN MICROSOFT WORD
PLANTILLAS EN MICROSOFT WORD Una plantilla es un modelo o patrón para crear nuevos documentos. En una plantilla se guarda internamente el formato utilizado, es decir, el estilo de la fuente, el tamaño,
Más detallesCómo instalar fácilmente tu WordPress tras contratar un hosting en Hostalia
Cómo instalar fácilmente tu WordPress tras contratar un hosting en Hostalia Cardenal Gardoki, 1 48008 BILBAO (Vizcaya) Teléfono: 902 012 199 www.hostalia.com La puesta en marcha de WordPress es muy sencilla,
Más detallesPOLIMORFISMO "una interfaz, múltiples métodos".
"una interfaz, múltiples métodos". 20/02/2007 Polimorfismo 2 Indice Definición y caracteristicas Objetivos. SOBRRESCRITURA-SOBRECARGA SOBRECARGA Clases y métodos abstractos INTERFACES (herencia múltiple)
Más detallesASÍ CONSIGUES QUE TU WEB FUNCIONE EN BUSCADORES:
Tener una web no es sinónimo de aparecer en las primeras posiciones de los buscadores, ya que esto es una tarea complicada que lleva mucho tiempo. Para lograr una buena posición es necesario utilizar técnicas
Más detallesUna plantilla es un documento de Word 2003 con la característica de que el tipo de documento es plantilla de documento (.dot).
Unidad 3. Plantillas Objetivos de la unidad: Una plantilla es un documento prediseñado que usted puede usar para crear nuevos documentos con el mismo formato. A través de una plantilla, el aspecto de un
Más detallesFormularios. Formularios Diapositiva 1
Formularios Crear un formulario utilizando el Asistente para formularios Modificación en vista Diseño Adición de Controles a un Formulario Adición de un Subformulario a un formulario Formularios Diapositiva
Más detalles10. El entorno de publicación web (Publiweb)
10. El entorno de publicación web (Publiweb) 10.1. Introducción El entorno de publicación Web es una herramienta que permite la gestión de nuestras páginas Web de una forma visual. Algunos ejemplos de
Más detallesESCUELA SUPERIOR DE INFORMATICA Prácticas de Estadística UNA SESIÓN EN SPSS
UNA SESIÓN EN SPSS INTRODUCCIÓN. SPSS (Statistical Product and Service Solutions) es un paquete estadístico orientado, en principio, al ámbito de aplicación de las Ciencias sociales, es uno de las herramientas
Más detallesUso de varias pantallas y pantalla Splash
Uso de varias pantallas y pantalla Splash Índice 1. USO DE VARIAS PANTALLAS... 3 2. CREACIÓN DE PANTALLA DE INICIO O DE SPLASH... 10 2 1. Uso de varias pantallas Vamos a explicar como se crean aplicaciones
Más detallesPropuesta de Portal de la Red de Laboratorios Virtuales y Remotos de CEA
Propuesta de Portal de la Red de Laboratorios Virtuales y Remotos de CEA Documento de trabajo elaborado para la Red Temática DocenWeb: Red Temática de Docencia en Control mediante Web (DPI2002-11505-E)
Más detallesPresentaciones. Con el estudio de esta Unidad pretendemos alcanzar los siguientes objetivos:
UNIDAD 8 Presentaciones Reunión. (ITE. Banco de imágenes) as presentaciones son documentos formados por una sucesión de páginas, llamadas diapositivas, que transmiten información estructurada de manera
Más detallesTaller: Introducción a Windows Communication Foundation
Taller: Introducción a Windows Communication Foundation Autor: Carlos Milán Figueredo Nivel: 100 (Principiante) Pre-requisitos: Visual Studio 2008 Email: cmilanf@dotnetclubs.com Web: http://www.dotnetclubs.com
Más detallesBase de datos en Excel
Base de datos en Excel Una base datos es un conjunto de información que ha sido organizado bajo un mismo contexto y se encuentra almacenada y lista para ser utilizada en cualquier momento. Las bases de
Más detallesTUTORIAL DE PUBLICACIÓN PARA REDACTORES
TUTORIAL DE PUBLICACIÓN PARA REDACTORES Fitfusion, pretende ser un punto de encuentro entre profesionales y adictos al fitness, donde compartimos conocimiento sobre nuestra pasión, el ejercicio físico
Más detallesDOCUMENTOS COMPARTIDOS CON GOOGLE DOCS
DOCUMENTOS COMPARTIDOS CON GOOGLE DOCS 1. Introducción Los ambientes de aprendizaje acompañados de trabajos colaborativos como estrategia se revierten en actividades de diferente índole (análisis de videos,
Más detallesInternet aula abierta
MINISTERIO DE EDUCACIÓN Y CIENCIA SECRETARÍA GENERAL DE EDUCACIÓN Y FORMACIÓN PROFESIONAL DIRECCIÓN GENERAL DE EDUCACIÓN, FORMACIÓN PROFESIONAL E INNOVACIÓN EDUCATIVA CENTRO NACIONAL DE INFORMACIÓN Y COMUNICACIÓN
Más detallesImpress : Programa de presentaciones de OpenOffice.
Impress : Programa de presentaciones de OpenOffice. Básicamente Impress es un programa de presentaciones proyectadas a través de diapositivas (pantallas completas) que un orador o ponente puede utilizar
Más detallesActivación de un Escritorio Remoto
Activación de un Escritorio Remoto La activación de un Escritorio Remoto se realiza en dos fases, en la primera se habilita a un Usuario de un ordenador para que pueda admitir una conexión remota, la segunda
Más detallesUNIVERSIDAD DE SALAMANCA
UNIVERSIDAD DE SALAMANCA FACULTAD DE CIENCIAS INGENIERÍA TÉCNICA EN INFORMÁTICA DE SISTEMAS Resumen del trabajo práctico realizado para la superación de la asignatura Proyecto Fin de Carrera. TÍTULO SISTEMA
Más detallesCrear una Nueva Solución Vacía:
Lo primero que haremos será crear una Solución Vacía, en la cual almacenaremos todos los proyectos y sus clases, que desarrol lemos a lo largo de este curso. Crear una Nueva Solución Vacía: Clic en el
Más detallesProceso de cifrado. La fortaleza de los algoritmos es que son públicos, es decir, se conocen todas las transformaciones que se aplican al documento
Qué es AT-Encrypt nos permitirá dotar de contraseña a cualquier documento o carpeta. Este documento o carpeta sólo será legible por aquel que conozca la contraseña El funcionamiento del cifrado (o encriptación)
Más detallesREQUISITOS PARA LA FIRMA DIGITAL
REQUISITOS PARA LA FIRMA DIGITAL 1 Contenido Capítulo/sección Página 1 Introducción. 3 2 Restricciones. 4 3 Máquina Virtual de Java 5 3.1 Abrir Panel de Control de Java 5 3.2 Verificación de versión desde
Más detallesMÓDULO 3 HERRAMIENTAS EN LA NUBE: ANFIX
MÓDULO 3: TEMA 1 INTRODUCCIÓN Hemos elegido esta herramienta, por su sencillez de acceso a través de la web, es bastante fácil e intuitiva, tan sólo tienes que registrarte, confirmar tu cuenta y ya puedes
Más detallesMANUAL PARA GESTIÓN DE INCIDENCIAS INFORMÁTICAS
MANUAL PARA GESTIÓN DE INCIDENCIAS INFORMÁTICAS En este manual aprenderemos a introducir un Ticket de Soporte (Incidencia Informática) y ver todo el proceso hasta que se resuelve. Para poder escribir Tickets
Más detalles2011-2012 RESOLUCIÓN DE ERRORES EN MOODLE CAMPUS VIRTUAL-BIRTUALA UPV-EHU
2011-2012 RESOLUCIÓN DE ERRORES EN MOODLE CAMPUS VIRTUAL-BIRTUALA UPV-EHU Antecedentes:... 2 1. Introducción... 3 2. Imágenes que no se visualizan... 3 3. URLs de recursos o actividades que no son autocontenido...
Más detallesEjercicios - Persistencia en Android: ficheros y SQLite
Ejercicios - Persistencia en Android: ficheros y SQLite Índice 1 Uso de ficheros (0.5 puntos)...2 2 Persistencia con ficheros (0.5 puntos)...3 3 Base de datos: SQLiteOpenHelper (0.5 puntos)... 3 4 Base
Más detallesCómo encontrar. el CRM adecuado. para mi empresa? una guía creada por
Cómo encontrar el CRM adecuado para mi empresa? una guía creada por Por qué las hojas de cálculo y el email no son suficientes para realizar el seguimiento en tu empresa La mayoría de las empresas pequeñas
Más detallesCREAR UN SERVICIO WEB BASICO CON JAVA AXIS2. Víctor J. Sosa vjsosa@tamps.cinvestav.mx
CREAR UN SERVICIO WEB BASICO CON JAVA AXIS2. Víctor J. Sosa vjsosa@tamps.cinvestav.mx En este documento explicaré brevemente cómo construir un servicio web con Java Axis2 y cómo invocarlo desde un cliente
Más detalles.NET y J2EE VALORACIÓN Y COMPARACIÓN DE LOS ELEMENTOS DE LAS DOS PLATAFORMAS. Definiciones...2 C# y Java...3 Similitudes...4 Ventajas...
.NET y J2EE VALORACIÓN Y COMPARACIÓN DE LOS ELEMENTOS DE LAS DOS PLATAFORMAS Definiciones...2 C# y Java.....3 Similitudes...4 Ventajas...4 Definiciones Sobre J2EE J2EE (Java 2 Platform Enterprise Edition)
Más detallesLa interoperabilidad se consigue mediante la adopción de estándares abiertos. Las organizaciones OASIS y W3C son los comités responsables de la
Servicios web Introducción Un servicio web es un conjunto de protocolos y estándares que sirven para intercambiar datos entre aplicaciones. Distintas aplicaciones de software desarrolladas en lenguajes
Más detallesUso del Programa Gantt Project
Uso del Programa Gantt Project Presentación En esta práctica guiada aprenderás varias cosas relacionadas con el uso de Gantt Project, que es una aplicación de ayuda a la gestión de proyectos: Especificar
Más detallesImporta los datos de tu empresa a ClassicGes 6
Importa los datos de tu empresa a ClassicGes 6 Y trabaja con el programa desde el primer momento El proceso de importación es una operación ágil y transparente para el usuario, que te permite disfrutar
Más detalles15 CORREO WEB CORREO WEB
CORREO WEB Anteriormente Hemos visto cómo funciona el correo electrónico, y cómo necesitábamos tener un programa cliente (Outlook Express) para gestionar los mensajes de correo electrónico. Sin embargo,
Más detallesSERVIDOR WEB PARA ACCESO EN TIEMPO REAL A INFORMACIÓN METEOROLÓGICA DISTRIBUIDA
SERVIDOR WEB PARA ACCESO EN TIEMPO REAL A INFORMACIÓN METEOROLÓGICA DISTRIBUIDA E. SÁEZ, M. ORTIZ, F. QUILES, C. MORENO, L. GÓMEZ Área de Arquitectura y Tecnología de Computadores. Departamento de Arquitectura
Más detallesEdición de Ofertas Excel Manual de Usuario
Edición de Ofertas Excel Manual de Usuario Alfonso XI, 6 28014 Madrid F(+34) 91 524 03 96 www.omie.es Ref. MU_OfertasExcel.docx Versión 4.0 Fecha: 2012-11-26 ÍNDICE 1 INTRODUCCIÓN 3 2 CONSIDERACIONES DE
Más detallesAproximación local. Plano tangente. Derivadas parciales.
Univ. de Alcalá de Henares Ingeniería de Telecomunicación Cálculo. Segundo parcial. Curso 004-005 Aproximación local. Plano tangente. Derivadas parciales. 1. Plano tangente 1.1. El problema de la aproximación
Más detallesElementos requeridos para crearlos (ejemplo: el compilador)
Generalidades A lo largo del ciclo de vida del proceso de software, los productos de software evolucionan. Desde la concepción del producto y la captura de requisitos inicial hasta la puesta en producción
Más detallesInternet como herramientas de comunicación: El correo electrónico
Internet como herramientas de comunicación: El correo electrónico 1. El correo electrónico Objetivo del tema: Aprender a manejar el correo electrónico y los medios de comunicación existentes en Internet.
Más detalles5 razones por las que NO DEBERÍAS ABRIR UNA TIENDA ONLINE
5 razones por las que NO DEBERÍAS ABRIR UNA TIENDA ONLINE Cómo has llegado hasta aquí (y si aún estás a tiempo de darte la vuelta) Si estás pensando en abrir una tienda online, es posible que te encuentres
Más detallesInternet aula abierta
MINISTERIO DE EDUCACIÓN Y CIENCIA SECRETARÍA GENERAL DE EDUCACIÓN Y FORMACIÓN PROFESIONAL DIRECCIÓN GENERAL DE EDUCACIÓN, FORMACIÓN PROFESIONAL E INNOVACIÓN EDUCATIVA CENTRO NACIONAL DE INFORMACIÓN Y COMUNICACIÓN
Más detallesModelo de Objetos Distribuidos
Remote Method Invocation Modelo de Objetos Distribuidos Un objeto remoto es un objeto cuyos métodos pueden ser invocados desde otra máquina virtual de java, potencialmente en un host diferente. Modelo
Más detallesCURSO RÁPIDO DE PHOTOSHOP APLICADO AL SLOT
CURSO RÁPIDO DE PHOTOSHOP APLICADO AL SLOT Ricard Garrós http://elartedelphotoshop.blogspot.com/ & http://www.fusky.es CURSO RÁPIDO DE PHOTOSHOP APLICADO AL SLOT Aquí os traigo la tercera entrega del curso,
Más detallesManual para usuarios USO DE ONEDRIVE. Universidad Central del Este
Manual para usuarios USO DE ONEDRIVE Universidad Central del Este Contenido 1. QUÉ ES Y PARA QUÉ SIRVE OFFICE 365?... 3 1.1 CÓMO ENTRAR A LA PLATAFORMA DE OFFICE 365 DE LA UCE?... 3 ONEDRIVE... 5 2. QUÉ
Más detallesIptables, herramienta para controlar el tráfico de un servidor
Iptables, herramienta para controlar el tráfico de un servidor La seguridad es punto muy importante a tener en cuenta en cualquier organización de ahí que sea fundamental hacer uso de aquellos mecanismos
Más detallesPROGRAMACIÓN ORIENTADA A OBJETOS
PROGRAMACIÓN ORIENTADA A OBJETOS Clase 1. Introducción Profesor: Diego Sánchez Gómez Introducción a la programación orientada a objetos 1. Introducción a la programación orientada a objetos 2. Las clases
Más detallesCómo sabes si tus esfuerzos en Social Media te están dando resultados? Para eso hay que medir, y Google Analytics ha venido a ayudarnos.
Cómo sabes si tus esfuerzos en Social Media te están dando resultados? Para eso hay que medir, y Google Analytics ha venido a ayudarnos. Hoy en día, las piedras angulares de los negocios son las páginas
Más detallesComo verás pone Microsoft Office y si te colocas sobre esta línea debería salir:
:: Introducción: Microsoft dispone de un conjunto de herramientas llamado Office que se compone de todo lo necesario para resolver cuantos problemas se presenten en los trabajos propios de cualquier usuario
Más detallesGUÍA RÁPIDA DE TRABAJOS CON ARCHIVOS.
GUÍA RÁPIDA DE TRABAJOS CON ARCHIVOS. 1 Direcciones o Ubicaciones, Carpetas y Archivos Botones de navegación. El botón Atrás permite volver a carpetas que hemos examinado anteriormente. El botón Arriba
Más detallesAnalítica para tu web
Analítica para tu web Mide, analiza y actúa para mejorar tus resultados Índice 1. Qué es la analítica web 2. Configura webmaker para utilizar tu herramienta de analítica web favorita 3. Métricas más habituales
Más detallesCapítulo 4. Requisitos del modelo para la mejora de la calidad de código fuente
Capítulo 4. Requisitos del modelo para la mejora de la calidad de código fuente En este capítulo definimos los requisitos del modelo para un sistema centrado en la mejora de la calidad del código fuente.
Más detallesCómo creo las bandejas del Registro de Entrada /Salida y de Gestión de Expedientes?
Preguntas frecuentes Cómo creo las bandejas del Registro de Entrada /Salida y de Gestión de Expedientes? Atención! Esta opción es de configuración y solamente la prodrá realizar el administrador de la
Más detallesHERRAMIENTAS DE ACCESS ACCESS 2010. Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE
HERRAMIENTAS DE ACCESS ACCESS 2010 Manual de Referencia para usuarios Salomón Ccance CCANCE WEBSITE HERRAMIENTAS DE ACCESS En esta unidad veremos algunas de las herramientas incorporadas de Access que
Más detallesIntroducción a la programación orientada a objetos
Introducción a la programación orientada a objetos 1. Introducción a la programación orientada a objetos 2. Las clases 3. El tipo Struct 4. Diferencias entre Class y Struct 5. Pilares de la Programación
Más detallesPrimeros pasos en el aula virtual
Primeros pasos en el aula virtual Cómo trabajaremos? El recorrido de formación que les proponemos se desarrolla en dos módulos de trabajo que contienen cinco y diez clases respectivamente (ver Programa
Más detallesEl control de la tesorería consiste en gestionar desde la aplicación los cobros y pagos generados a partir de las facturas de venta y de compra.
Gestión de la tesorería y del riesgo El control de la tesorería consiste en gestionar desde la aplicación los cobros y pagos generados a partir de las facturas de venta y de compra. En este manual nos
Más detallesControl Remoto de Ordenadores: Por Manuel Murillo García
Control Remoto de Ordenadores: Por Manuel Murillo García Quien no ha tenido la necesidad o curiosidad de tomar el control remoto de un ordenador vía Internet. Es difícil? Hay que configurar muchas cosas?
Más detalles