Universidad Carlos III de Madrid Sistemas Distribuidos Práctica 5 Práctica de servicios Web con .NET Félix García Carballeira Luis Miguel Sánchez García Carlos Fómez Carrasco Borja Bergua Guerra 1 Universidad Carlos III de Madrid Sistemas Distribuidos Cuaderno de prácticas WEB SERVICES EN .NET El objetivo de esta práctica es desarrollar una aplicaci aplicación ón cliente que haga uso de un servicio Web utilizando la plataforma .NET y el lenguaje C#. 1. Introducción a la plataforma .NET El principal objetivo de la plataforma .NET es presentar un m modelo odelo uniforme (véase la siguiente figura) para el de desarrollo de aplicaciones de escritorio y aplicaciones Web. La plataforma .NET es el modelo de desarrollo de Microsoft que hace que el software sea independiente de la plataforma y de los dispositivos, y hace que los datos estén disponibles a través de Internet. El .NET Framework es la infraestructura básica subyacente de .NET. Antes de .NET Programación Desktop Programación Web Orientación a objetos ASP (no orientado a objetos) Código compilado (C/C++, Fortran, ...) Código interpretado (VBScript, Muchas y diferentes Bibliotecas Javascript, PHP, ...) de clases Bibliotecas especializadas Con .NET Programación Desktop y Web Orientación a objetos (incluso ASP.NET) Código compilado (C#, C++, VB.NET, Fortran, ...) Biblioteca de clases única .NET ha sido implementado desde el principio pensando en una arquitectura abierta. .NET es una plataforma que puede utilizarse para generar y ejecut ejecutar ar de aplicaciones Windows y aplicaciones Web. Su principal objetivo es simplificar el desarrollo Web. La plataforma .NET (veáse la siguiente Figura) abarca a clientes, servidores y servicios; está formada, entre otras cosas, por: • Un modelo de programación programación que permite a los desarrolladores generar aplicaciones y servicios Web. • Un conjunto de servicios building block fundamentales, que son un conjunto de servicios Web centrados en el usuario que trasladan el control de datos de usuario desde las 1 2 Universidad Carlos III de Madrid Sistemas Distribuidos Cuaderno de prácticas WEB SERVICES EN .NET • aplicaciones hasta los usuarios. Por ejemplo, Microsoft Passport es un componente principal de la iniciativa .NET que facilita la integración de diversas aplicaciones. Herramientas, como Visual Studio .NET, que pueden utilizarse para desarrollar servicios Web XML, aplicaciones Windows y aplicaciones Web para obtener una rica experiencia de usuario. Aplicaciones Tradidionales (Código no Administrado) Código Administrado Biblioteca de Clases Aplicaciones Web Formularios Web Services Web ASP.NET Common Language Runtime Servidor Web (IIS) Sistema Operativo (Windows, Linux, Unix, ...) .NET Framework + Herramientas (Visual Studio .NET) + Servidores (SQL Server, ExchangeServer, ...) + Servicios (Passport Service, ...) 1.1 .NET Framework El .NET Framework proporciona la base sobre la que se desarrollan y ejecutan las plicaciones y los servicios Web . .NET Framework actúa como un elemento unificado, lo que significa que las aplicaciones, tanto si son aplicaciones Windows tradicionales, aplicaciones Web o servicios Web , se desarrollan utilizando un conjunto de herramientas y código comunes, lo que facilita enormemente su integración. El .NET Framework está formado por los siguientes componentes: • El Common Language Runtime (de ahora en adelante, CLR). El CLR es el encargao de gestionar los servicios en tiempo de ejecución, incluyendo la integración de lenguajes, la seguridad y la gestión de memoria. • Biblioteca común de clases. Estas bibliotecas proporcionan código reutilizable para las tareas más habituales, incluyendo el acceso a datos, el desarrollo de servicios Web , Web Forms y Windows Forms. • ADO.NET es la próxima generación de la tecnología ActiveX Data Object (ADO). El elevado nivel de integración de ADO.NET en XML permite a los desarrolladores transferir conjuntos de datos (cachés de datos en memoria) entre los distintos componentes de una solución de empresa. • ASP.NET se basa en las clases de programación de .NET Framework para proporcionar un modelo de aplicaciones Web en la forma de un conjunto de controles e infraestructura que facilita la creación de aplicaciones Web. Los desarrolladores pueden acceder a un 2 3 Universidad Carlos III de Madrid Sistemas Distribuidos Cuaderno de prácticas WEB SERVICES EN .NET conjunto de controles Web de ASP.NET con funciones comunes de interfaces de usuario en lenguaje de marcado de hipertexto (HTML), como cuadros de texto y menús desplegables. Estos controles se ejecutan en el servidor Web y proyectan su interfaz de usuario a un navegador como HTML. La plataforma .NET es compatible con los siguientes dispositivos: • PCs portátiles. • Estaciones de trabajo. • PCs de bolsillo. • PDAs. • Teléfonos móviles. • Consolas de juegos. • Tablet PCs. Una de sus características más interesantes es que permite Compatibilidad binaria (véase la figura siguiente) entre más de 20 lenguajes (C#, C++, VB.NET, Java, Eiffel, Fortran, Cobol, ML, Haskell, Pascal, Oberon, Perl, Python, ...) Clase en VB.NET Public Class A Public x As Integer Public Sub Foo() ... End Class Subclase en C# Clase en Eiffel class B : A { class Client feature public string s; obj: B; ... public void Bar() {...} } create obj; obj.Bar; ... end 1.2 Introducción a C# C# es un lenguaje de programación diseñado especialmente para la plataforma .NET. C# es un moderno lenguaje orientado a objetos con el que los programadores podrán crear con facilidad una amplia gama de aplicaciones para la nueva plataforma Microsoft .NET, y que dispone de herramientas y servicios para aprovechar al máximo la informática y las comunicaciones. C# es un lenguaje orientado a objetos, que permite crear una gran variedad de componentes, desde objetos de negocio de alto nivel hasta aplicaciones de sistema. Mediante construcciones simples de lenguaje C#, estos componentes pueden convertirse en servicios Web y ser invocados a través de Internet desde cualquier lenguaje que se ejecute en cualqu cualquier ier sistema operativo. 3 4 Universidad Carlos III de Madrid Sistemas Distribuidos Cuaderno de prácticas WEB SERVICES EN .NET Es un lenguaje muy parecido a Java. Se considera que tiene un 70% de similitud con Java, un 10% con C++, un 5% con Visual Basic, siendo un 15% completamente nuevo. La siguiente figura muestra las similitudes con Java y C++. Como en Java • • • • • • • • • • Como en C++ Orientación a objetos (herencia simple) Interfaces Excepciones Threads Namespaces (similar a Java packages) Fuerte tipado Recolección de basura Reflexión Carga dinámica de código ... • Tipos struct • Sobrecarga de operadores • Aritmética de punteros en código no seguro • Algunos detalles sintácticos C# es un lenguaje de programación simple pero eficaz, diseñado para escribir plicaciones empresariales. El lenguaje C# es una evolución de los lenguajes C y C++. Utiliza muchas de las características de C++ en las áreas de ins instrucciones, trucciones, expresiones y operadores. C# presenta considerables mejoras e innovaciones en áreas como seguridad de tipos, control de versiones, eventos y recolección de elementos no utilizados (liberación de memoria). C# proporciona acceso a los tipos de API más comunes: .NET Framework, COM, Automatización y estilo C. Asimismo, admite el modo unsafe, en el que se pueden utilizar punteros para manipular memoria que no se encuentra bajo el control del recolector de elementos no utilizados. 1.2.1 La versión C# del programa Hola Mundo El siguiente programa de consola muestra la versión C# del típico programa "Hola Mundo". // Programa Hola Mundo en C# class HolaMundo { static void Main() { System.Console.WriteLine("Hola Mundo!"); } } 4 5 Universidad Carlos III de Madrid Sistemas Distribuidos Cuaderno de prácticas WEB SERVICES EN .NET A continuación se indican algunos puntos importantes de este programa: comentarios, el método Main, la entrada y salida básica, la compilación y ejecución. La primera línea contiene un comentario: // Programa Hola Mundo en C# Los caracteres // convierten el resto de la línea en un comentario. Un bloque de texto también se puede convertir en comentario si se coloca entre los caracteres /* y */, por ejemplo: Cualquier programa en C# debe contener un método Main, en el cual se inicia y se termina la ejecución. Este método es donde se crean los objetos y se ejecutan otros métodos. El método Main es un método estático que reside dentro de una clase o una estructura. En el ejemplo de "Hola Mundo!", se encuentra dentro de la clase HolaMundo. El método Main se puede declarar de varias formas: static void Main() { ... } También puede devolver un valor de tipo int: static int Main() { ... return 0; } Puede utilizar argumentos con los dos tipos devueltos: static int Main(string[] args) { ... return 0; } O bien static void Main(string[] args) { ... } 5 6 Universidad Carlos III de Madrid Sistemas Distribuidos Cuaderno de prácticas WEB SERVICES EN .NET El parámetro del método Main es una matriz de tipo string que representa los argumentos de la línea de mandatos utilizados para invocar al programa. Observe que, a diferencia de C++, esta matriz no incluye el nombre del archivo ejecutable (exe). Los programas de C# utilizan normalmente los servicios de entrada y salida que ofrece la biblioteca de tiempo de ejecución de .NET Framework. En la instrucción System.Console.WriteLine("Hola Mundo!"); Mundo!"); se utiliza el método WriteLine, uno de los métodos de salida de la clase Console de la biblioteca de tiempo de ejecución. Muestra el parámetro cadena en la secuencia de salida estándar seguido por una nueva línea. Otros métodos de Console se utilizan para otras operaciones de entrada y salida. Si incluye la instrucción using System; al principio del programa, puede utilizar directamente las clases y los métodos System sin escribir el nombre completo. Por ejemplo: Console.WriteLine("Hola Mundo!"); El programa "Hola a todos" se puede compilar creando un proyecto en el Entorno de desarrollo integrado (IDE) de Visual Studio , o bien mediante la línea de mandatos. Para compilar el programa desde la línea de comandos debe crear el archivo de código fuente mediante cualquier editor de texto y guardarlo con un nombre como HolaMundo.cs. Los archivos de código fuente de C# utilizan la extensión .cs. Para invocar el compilador, basta con ejecutar el siguiente mandato: csc HolaMundo.cs Si el programa no contiene errores de compilación, se creará un archivo HolaMundo.exe, que se podrá ejecutar directamente. 1.2.2 Estructura general de un programa C# Los programas en C# pueden constar de uno o varios archivos. Cada archivo puede contener uno o varios espacios de nombres. Un espacio de nombres puede contener tipos como clases, estructuras, interfaces, enumeraciones y delegados, además de otros espacios de nombres. A continuación, se muestra el esqueleto de un programa en C# que contiene todos estos elementos. // Esqueleto básico de un programa C# using System; namespace MyNamespace1 { class MyClass1 { } struct MyStruct 6 7 Universidad Carlos III de Madrid Sistemas Distribuidos Cuaderno de prácticas WEB SERVICES EN .NET { } interface IMyInterface { } delegate int MyDelegate(); enum MyEnum { } namespace MyNamespace2 { } class MyClass2 { public static void Main(string[] args) { } } } La palabra clave namespace se utiliza para declarar un ámbito. Este ámbito permite organizar el código y proporciona una forma de crear tipos globalmente exclusivos. 1.2.3 Tipos de datos básicos Los tipos del lenguaje C# se dividen en dos categorías principales: tipos de valor y tipos de referencia. Una tercera categoría de tipos son los punteros, que sólo está disponible en el código no seguro, que se describirá más adelante. Dentro de los tipos de valor se encuentran los tipos struct, tipos simples, los tipos en coma flotante, el tipo tipo decimal y el tipo Bool. Los principales tipos de datos son: sbyte, byte, short, ushort, int, uint, long, ulong, char, double, float, bool y decimal. Todos ellos son similares a los tipos de datos utilizados en C o C++ Dentro de los tipos de referencia se encuentran los tipos de clase, el tipo object, el tipo string, el tipo de interfaz y el tipo de matriz. 1.3 Introducción a Visual Studio .NET Visual Studio .NET es un conjunto de aplicaciones completo para la creación tanto de aplicaciones de escritorio como de aplicaciones Web de empresa para trabajo en equipo. Aparte de generar aplicaciones de escritorio de alto rendimiento, se pueden utilizar las eficaces herramientas de desarrollo basado en componentes y otras tecnologías de Visual Studio para simplificar el diseño, desarrollo e implementación en equipo de soluciones para empresa. 7 8 Universidad Carlos III de Madrid Sistemas Distribuidos Cuaderno de prácticas WEB SERVICES EN .NET La ¡Error! No se encuentra el origen de la referencia.siguiente figura muestra el entorno de desarrollo de Visual Studio 2010. Figura 1 Pantalla inicial de Visual Studio 2010 Para desarrollar una aplicación visual con C#, hay que elegir Nuevo Proyecto (en este caso con nombre Prueba) y Visual C# | Windows | Aplicación de Windows Forms. 8 9 Universidad Carlos III de Madrid Sistemas Distribuidos Cuaderno de prácticas WEB SERVICES EN .NET Cuando se crea un proyecto aparece una ventana similar a la que se muestra en la siguiente Figura: El entorno incluye un cuadro de herramientas donde se encuentran los controles que podemos incluir en las aplicaciones. Un editor en el que podemos insertar el código. El examinador de objetos muestra los diferentes elementos que tenemos abierto en el proyecto. El explorador de soluciones incluye, entre otras cosas, todos los archivos que incluye nuestro proyecto. El apartado de Propiedades muestra las propiedades que tiene cualquier elemento marcado en la parte Editor/Navegador. Existe también una parte donde se muestra ayuda dinámica y otra donde se muestran diversas listas de tareas, por ejemplo, los errores que se obtienen al compilar la aplicación. El explorador de servidores Para desarrollar una primera aplicación sencilla, en el Cuadro de herramientas, arrastre un control Button al formulario. Haga clic en el botón para seleccionarlo. En la ventana Propiedades, establezca la propiedad Text en "Hola". De esta forma el botón incluirá el texto “Hola”. A continuación a partir del cuadro de herramientas, arrastre un control TextBox al formulario. Para escribir el código de la aplicación haga doble clic en el botón botón para agregar un controlador de eventos para el evento Click del botón. Se abrirá el Editor de código con el punto de inserción situado dentro del controlador de eventos: 9 10 Universidad Carlos III de Madrid Sistemas Distribuidos Cuaderno de prácticas WEB SERVICES EN .NET private void button1_Click(object sender, System.EventArgs e) { } Lo único que queda es Insertar el código siguiente: private void button1_Click(object sender, System.EventArgs e) { textBox1.Text = "Hola Mundo"; } De esta forma cuando se haga click sobre el botón Hola, se mostrará en el cuadro de texto la cadena “Hola Mundo”. Grabe el proyecto y haga clic en Iniciar para compilar y ejecutar el proyecto. 1.3.1 Incorporación de un servicio web a una aplicación visual A continuación se va a describir cómo desrrollar un formulario cliente de un servicio web. El servicio web elegido es el definido en: http://www.dataaccess.com/webservicesserver/numberconversion.wso?WSDL Que incluye dos métodos; • • NumberToWords Returns the word corresponding to the positive number passed as parameter. Limited to quadrillions. NumberToDollars Returns the non-zero dollar amount of the passed number. 10 11 Universidad Carlos III de Madrid Sistemas Distribuidos Cuaderno de prácticas WEB SERVICES EN .NET La Aplicación desarrollada tendrá el siguiente aspecto: añadir ir una referencia web con la URL anterior. En el Una vez creado el proyecto, lo primero es añad explorador de soluciones haga clic con el botón derecho sobre References y elija Agregar Referencia de Servicio. Aparecerá la siguiente ventana. Haga Clic en Avanzadas y elija Agregar Referencia Web. Aparecerá una ventana como esta: 11 12 Universidad Carlos III de Madrid Sistemas Distribuidos Cuaderno de prácticas WEB SERVICES EN .NET Inserte la referencia del servicio http://www.dataaccess.com/webservicesserver/numberconversion.wso?WSDL en dirección URL, cambie el nombre de la referencia web por Conversion, y aparecerá una pantalla como la siguiente: En la que se puede ver la descripción de los métodos que incluye el servicio web. El siguiente paso es crear el formulario: 12 13 Universidad Carlos III de Madrid Sistemas Distribuidos Cuaderno de prácticas WEB SERVICES EN .NET Que incluye dos cuadros de texto (textBox1 y textBox2 por defecto). Dos botones (button1 y button2 por defecto) y dos etiquetas (label1 y label2 por defecto). La aplicación tomará un número insertado en el primer cuadro de texto y cuando se haga clic sobre el botón Convertir se invocará el servicio web para convertir el número dado en cifras en letras. El resultado se mostrará en el cuadro de texto 2. El código asociado a los botones Convertir y Borrar es el siguiente: private void button2_Click(object sender, EventArgs e) { textBox1.Text = ""; textBox2.Text = ""; } private void button1_Click(object sender, EventArgs e) { // se crea una referencia para poder invocar el servicio web Conversion.NumberConversion c = new Conversion.NumberConversion(); // se convierte el número introducido en el cuadro de texto 1 de String a // ulong que es el tipo de datos del argumento que se pasa al método // NumberToWords ulong num = ulong.Parse(textBox1.Text); textBox2.Text = c.NumberToWords(num); // invoca el servicio Web } A continuación, se puede compilar y ejecutar el programa, que dará una salida como la que se muestra a continuación: 13 14 Universidad Carlos III de Madrid Sistemas Distribuidos Cuaderno de prácticas WEB SERVICES EN .NET 14 15 Universidad Carlos III de Madrid Sistemas Distribuidos Cuaderno de prácticas WEB SERVICES EN .NET 2. Descripción de la práctica El alumno deberá diseñar, codificar y probar, utilizando utilizando para ello el lenguaje C# y sobre la herramienta Visual Studio 2010, dos clientes que consuman servicios web. 2.1 Conversión de temperatura Se pretende la implementación de una aplicación que invoque el servicio web que se encuentra en la dirección: http://www.w3schools.com/webservices/tempconvert.asmx Que incluye dos métodos: • • CelsiusToFahrenheit FahrenheitToCelsius El alumno deberá desarrollar una aplicación cliente con una interfaz que ofrezca al usuario la posibilidad de introducir un valor de temperatura y convertirla a grados Celsius o Fahrenheit. Un posible esquema de interfaz se muestra en la siguiente imagen. Al hacer clic sobre el botón “To Celsius”, se asume que el valor introducido por el usuario se encuentra en Fahrenheit y se muestra el resultado de la conversión en la casilla inferior. Si por el contrario se pulsa sobre “To Fahrenheit”, se asume que el valor introducido son grados Celsius y se procede a mostrar su equivalente en Fahrenheit. 2.2 IP Info Se pretende desarrollar de una aplicación cliente que haga uso de dos servicios web. El primero de ello se encuentra en la siguiente dirección: http://tarya.co.uk/ws/Ip2countryws.asmx Y ofrece los siguientes servicios: 15 16 Universidad Carlos III de Madrid Sistemas Distribuidos Cuaderno de prácticas WEB SERVICES EN .NET • getCountry Takes IP address, gives ISO Country El segundo servicio web necesario para la realización del cliente se encuentra en la dirección: http://webservices.oorsprong.org/websamples.countryinfo/CountryInfoService.wso?WSDL Y ofrece, entre otros, como servicios relevantes para la práctica los siguientes: • • CountryName Searches the database for a country by the passed ISO country code CapitalCity Returns the name of the captial city for the passed country code El alumno deberá ofrecer al usuario dos funcionalidades: • • El usuario podrá introducir una dirección IP y la aplicación obtendrá el código ISO del país donde se encuentra y, posteriormente, obtendrá mediante el segundo servicio, el nombre y la capital del país correspondiente. El usuario podrá introducir el código ISO de un país y la aplicación le indicará el nombre y la capital del mismo. Una posible interfaz se muestra a continuación: 16 17 Universidad Carlos III de Madrid Sistemas Distribuidos Cuaderno de prácticas WEB SERVICES EN .NET 3. Normas y recomendaciones generales Es responsabilidad del alumno leer y comprender est estee enunciado de práctica ANTES de la sesión en el laboratorio. La sesión de laboratorio estará dedicada a resolver todas aquellas dudas que hayan podido surgir. Se valorará el uso correcto del lenguaje en la memoria. El alumno tiene libertad a la hora de diseñar el sistema siempre que proporcione la funcionalidad pedida y se adapte a los requisitos descritos en el enunciado de la práctica 17 18 Universidad Carlos III de Madrid Sistemas Distribuidos Cuaderno de prácticas WEB SERVICES EN .NET 4. Documentación a entregar Se deben entregar los siguiente archivos_memoria.pdf En ella se deben comentar los aspectos del desarrollo de su práctica que considere más relevantes. Asimismo, puede exponer los comentarios personales que considere oportunos. Se deberá entregar un documento en formato PDF. Además deberá cumplir los siguientes requisitos: • Presentar una estructura lógica en sus contenidos (índice de contenidos). • Estar convenientemente formateada, para facilitar su lectura. • Describir con claridad, y en profundidad los puntos recogidos en este cuaderno de prácticas, así como los que decidan incluir como complemento. • Incluir las pruebas realizadas. • Incluir los comentarios personales que considere oportunos. • NO incluir el código fuente. La memoria debe incluir como mínimo los siguientes puntos: 1. Índice de contenidos. 2. Descripción del protocolo de aplicación utilizado entre el cliente y el servidor. 3. Diseño del programa, usando diagramas de flujo para explicar el funcionamiento del mismo. 4. Pruebas realizadas para probar la aplicación. 5. Conclusiones del alumno. 6. Descripción de las tareas realizadas y tiempo dedicado dedicado a cada tarea. El documento no debe sobrepasar las 20 páginas. ConverterApp Carpeta que contiene el proyecto generado en Visual Studio 2010 para la realización del primer cliente, esta carpeta la genera automáticamente VS2010 al crear un proyecto con el nombre CorverterApp. IPInfoApp Carpeta que contiene el proyecto generado en Visual Studio 2010 para la realización del segundo cliente, esta carpeta la genera automáticamente VS2010 al crear un proyecto con el nombre IPInfoApp. 18 19