Entendiendo Web Services con MonoDevelop

Entendiendo Web Services con MonoDevelop I de IV por Martín Márquez Introducción En las organizaciones un tema importa

Views 55 Downloads 1 File size 743KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Entendiendo Web Services con MonoDevelop I de IV por Martín Márquez

Introducción En las organizaciones un tema importante hoy día, es la integración de los sistemas de información ya existentes, para tener una mejor comunicación entre ellos y hacia otros sistemas externos en otras organizaciones y por supuesto hacia la Internet. A través de los años entre las distintas soluciones para la comunicación distribuida se crearon tecnologías de componentes como Microsoft DCOM y Corba que ayudaban a este propósito, Sin embargo estas tecnologías tienen ciertas limitantes como el hecho de ser dependientes del sistema operativo, la falta de compatibilidad entre protocolos y la dificultad para la implementación y el mantenimiento, etc. Estas limitantes hacen que no sean una opción adecuada para la comunicación y la integración de sistemas en distintas plataformas o sistemas localizados en la Internet. En este escenario los Web Services (servicios Web) son la solución adecuada ya que permiten la integración de sistemas de una forma estándar, practica y transparente.

¿Que son los Web Services? Un Web Service es un componente de software que se publica en un servidor Web o HTTP y que permite la comunicación distribuida entre sistemas o aplicaciones en diferentes máquinas al exponer uno o varios métodos que al ser invocados por otros sistemas vía un URL devuelven información usando protocolos estándar como HTTP y XML. Este documento XML de información devuelto por el Web Service puede ser procesado por cualquier aplicación o sistema en cualquier sistema operativo con cualquier lenguaje de programación que tenga las capacidades de procesar XML. Antes de empezar debemos tener instalado y configurado el entorno de desarrollo (IDE) Monodevelop http://www.monodevelop.org/Main_Page .que contiene todas las herramientas necesarias para construir y consumir servicios Web, a nivel de programación un Web Service es una clase que generalmente hereda de System.Web.Services.WebService y que contiene uno o varios métodos marcados como [WebMethod()] que serán publicados en una página con extensión .asmx que contiene directivas de ASP.NET y que es la extensión predeterminada de las páginas donde se ejecutan los Web Service. Una diferencia entre las páginas ASPX y los Web Services es que los Web Services no están pensados para ser utilizados por usuarios finales sino para ser usados por aplicaciones, por lo que no requieren una interfaz gráfica, aunque Mono provee una plantilla que se utiliza en cada Web Service para probar su ejecución de manera local. Empezaremos dentro de la ventana principal de MonoDevelop, .ahí seleccionaremos en el menú Archivo el submenú de Nueva solución.

Al hacer clic se aparecerá la siguiente ventana, en la lista de opciones del lado izquierdo abajo de la etiqueta Plantilla, seleccionamos C# y luego seleccionamos ASP.NET y en las opciones del lado derecho seleccionamos el icono Aplicación Web , Tecleamos un nombre. para el proyecto así como una ubicación para que Monodevelop haga la estructura, pulsamos el botón Adelante para continuar con la siguiente ventana.

En la ventana acerca de Funcionalidades del proyecto pulsamos el botón Aceptar ya que por el momento no trabajaremos con ninguna de las opciones presentadas.

Monodevelop nos creará la estructura de nuestra aplicación Web, como se ve en la pestaña solución del panel izquierdo.

Bien ahora agregaremos a nuestra solución un archivo Web Services, esto lo hacemos haciendo clic con el botón derecho del ratón, seleccionando el nombre en negritas del proyecto, como se muestra en la imagen.

Code Behind y Scripting Language En la ventana New File seleccionaremos en la lista del panel izquierdo la opción ASP.NET y en el panel de iconos del lado derecho la opción Servicio web con CodeBehind y en el cuadro de texto de la parte inferior tecleamos el nombre del Web Service en este caso BeginService. Las páginas ASP .NET (aspx) y los Páginas de los servicios Web (asmx) pueden programarse como Server Side Scripting que es una mezcla de etiquetas aspx con código C# dentro de una misma página con extensión .asmx, la otra forma Code Behind es la más recomendable ya que permite separar el funcionamiento o sea la lógica de programación en un archivo de clase C# y la presentación en la página .asmx, a la cual se asociada el archivo de clase C#.

En este punto Monodelop nos mostrará la siguiente estructura de archivos de nuestra aplicación Web incluido el archivo de publicación BeginService.asmx para nuestro servicio Web y el archivo de clase BeginService.asmx.cs asociado a ese archivo.

En el archivo de clase Monodevelop nos crea la estructura mínima necesaria que debe tener cualquier clase que sirva como Web Services, primeramente la clase deberá de heredar de la clase WebService que se encuentra en el ensamblado System.Web.Services public class BeginService : System.Web.Services.WebService Ahora completaremos esta clase con métodos, cada método que sera consumido al publicarse el Web Services, deberá de llevar el atributo [WebMethod()] arriba de su declaración, los parámetros y los valores devueltos por los métodos en los Web Services pueden ser desde tipos de datos primitivos como long, bool, float hasta objetos propios del Framework como un DataSet. Listado 1.1 El código final de la clase BeginService

using using using using

System; System.Web; System.Web.Services; System.Diagnostics;

namespace BeginService{ [WebService ( Name = "BeginService", Description = "BeginService", Namespace = "http://www.BeginService.example" ) ] public class BeginService : System.Web.Services.WebService{ public BeginService(){} [WebMethod(Description="Regresa el máximo común divisor de 2 números")] public long MaxComunDivisor(long m,long n){ long r; while(n != 0){ r = m % n; m = n; n = r; } return m; } [WebMethod(Description="Regresa una cadena para representar una fecha larga")] public string getFecha(){ DateTime dthoy = DateTime.Today; string[] meses = {"Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Oc tubre","Noviembre","Diciembre"}; return dthoy.Day.ToString() + " de " + meses[dthoy.Month -1] + " del " + dthoy.Year; } [WebMethod(Description="Regresa true si la cadena es número, false si no lo es.")] public bool isAnumber(string s){ try{ return Single.IsNaN(float.Parse(s)) ? false : true; }catch(FormatException e){ Debug.WriteLine(e.Message); return false; } } } }

Este ejemplo muestra el atributo WebMethod con la propiedad Description la cual nos sirve para mostrar la descripción del método cuando el Web Services sea publicado. [WebMethod(Description="Regresa el máximo común divisor de 2 números")] public long MaxComunDivisor(long m,long n) Otras propiedades del atributo WebMethod son:

BufferResponse

true o false para indicar o no si la respuesta del Web Services es serializado en un buffer de memoria hasta ser completada o hasta que el buffer este lleno.

CacheDuration

Establece el número de segundos que la respuesta estará contenida en el cache.

EnableSession

false o true para el soporte de sesiones.

MessageName

Identifica mediante un alias los métodos sobrecargados.

TransactionOption

Habilita al método para participar o no en una transacción, si ocurre una excepción en el método la transacción es abortada.

Antes de compilar el proyecto nos aseguramos de agregar al archivo Default.aspx un enlace a nuestro Web Service entre las etiquetas de la siguiente manera:

Begin Service

Finalmente el archivo BeginService.asmx quedará tal y como Monodelop lo genero.

Compilamos el proyecto con la opción del submenú Construir BeginService debajo del menú Proyecto o pulsando la tecla F7. Si todo se ejecuta sin errores Monodevelop mostrará en la parte de abajo el siguiente mensaje:

Ahora ejecutaremos el proyecto con la opción del submenú Ejecutar del menú Proyecto o

pulsando la tecla F5. Al ejecutar el proyecto se ejecutará el comando xsp2 que es el servidor Web para desarrollo de aplicaciones en el Framework Mono.

Después Monodevelop nos abrirá una ventana de firefox (siempre que sea el navegador predeterminado)con el siguiente URL para mostrarnos el resultado final.

Si todo se ejecuto correctamente al hacer clic en el enlace se mostrará la página predeterminada de Mono para probar los servicios Web de manera local, en esta página veremos en la tabla del lado izquierdo veremos sus propiedades como enlaces, entre ellas cada método que definimos en el archivo de clase.

Para probar un método en particular hacemos clic en el enlace correspondiente, ahí nos mostrará las opciones de ese método como enlaces en la parte superior y como overview nos muestra sus parámetros y el tipo de dato que devuelve..

La opción que nos interesa para probar el método es el enlace Test Form donde al hacer clic mostrará la siguiente pantalla solicitando los parámetros de entrada.

Finalmente al presionar el botón invoke nos mostrará el mensaje SOAP que será procesado por cualquier cliente con capacidades para interpretar XML independientemente del lenguaje de programación o del sistema operativo.

CONCLUSIÓN En esta primera parte vemos como Monodevelop y el Framework Mono nos proporcionan toda la infraestructura necesaria para crear Web Services, en la segunda parte mostraré como diferentes clientes pueden consumir o utilizar Web Services con relativa facilidad, como referencia importante se encuentra y no olvidar consultar la documentación del proyecto Mono en http://www.go-mono.com. Los ejemplos pueden ser descargados de http://www.humansharp.com/index.php Este documento está protegido bajo la licencia de documentación libre Free Documentacion License del Proyecto GNU, para consulta ver el sitio http://www.gnu.org/licenses/fdl.txt , toda persona que lo desee está autorizada a usar, copiar y modificar este documento según los puntos establecidos en la «Licencia FDL»