21
UNIVERSIDAD DON BOSCO FACULTAD INGENIERIA COORDINACION DE COMPUTACIÓN CICLO: 01/2020 GUIA DE LABORATORIO #7 Nombre de la Práctica: Aplicaciones con Web Service ASP Lugar de Ejecución: Centro de cómputo Tiempo Estimado: 2 horas con 30 minutos MATERIA: Lenguaje de Programación II I. OBJETIVOS Que el estudiante: Conozca los fundamentos teóricos sobre la creación de web service. Cree y consuma un web service en una aplicación web II. INTRODUCCIÓN TEÓRICA Web Service con C# Un Servicio Web (Web Service) puede definirse como un componente de una aplicación, que se ejecuta de forma remota. Esto permite la creación e implementación de aplicaciones web, con igual complejidad y efectividad que una aplicación de escritorio, pero añadiendo libertad de tener la estructura de Cliente-Servidor bien diferenciada. Las principales opciones que tenemos dentro de la tecnología .NET para este tipo de soluciones son: ASP.NET Web Services Windows Communication Foundation Services (WCF) El primer tipo es el que más se encuentra en aplicaciones hoy en día. La transferencia de datos se hace vía XML (utilizando XMLSerializer). Si además de tipos de datos básicos se transfieren Clases, sólo se pueden serializar las propiedades públicas de la misma. Los servicios del tipo WCF son más flexibles. Se puede mandar prácticamente cualquier clase, estructura o propiedad, sean públicas o privadas, que son serializadas usando DataContract. Esto también incluye los tipos de datos involucrados, declarados de forma explícita. En ambos casos el servicio se puede alojar en un servidor corriendo Internet Information Services (IIS). Interoperabilidad Cross-Platform Como el formato en el que se mandan los datos es XML, las aplicaciones que "consumen" el servicio pueden desarrollarse en cualquier lenguaje de programación, y ejecutarse en cualquier sistema operativo.

UNIVERSIDAD DON BOSCO FACULTAD INGENIERIA · requiere pagar licencias ni royalties para usarlo). UDDI Abreviación de Universal Description, Discovery and Integration. Es un directorio

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: UNIVERSIDAD DON BOSCO FACULTAD INGENIERIA · requiere pagar licencias ni royalties para usarlo). UDDI Abreviación de Universal Description, Discovery and Integration. Es un directorio

UNIVERSIDAD DON BOSCO

FACULTAD INGENIERIA

COORDINACION DE COMPUTACIÓN

CICLO: 01/2020

GUIA DE LABORATORIO #7

Nombre de la Práctica: Aplicaciones con Web Service ASP Lugar de Ejecución: Centro de cómputo Tiempo Estimado: 2 horas con 30 minutos MATERIA: Lenguaje de Programación II

I. OBJETIVOS

Que el estudiante:

Conozca los fundamentos teóricos sobre la creación de web service.

Cree y consuma un web service en una aplicación web

II. INTRODUCCIÓN TEÓRICA

Web Service con C#

Un Servicio Web (Web Service) puede definirse como un componente de una aplicación, que se ejecuta de forma remota. Esto permite la creación e implementación de aplicaciones web, con igual complejidad y efectividad que una aplicación de escritorio, pero añadiendo libertad de tener la estructura de Cliente-Servidor bien diferenciada.

Las principales opciones que tenemos dentro de la tecnología .NET para este tipo de soluciones son:

• ASP.NET Web Services

• Windows Communication Foundation Services (WCF)

El primer tipo es el que más se encuentra en aplicaciones hoy en día. La transferencia de datos se hace vía XML (utilizando XMLSerializer). Si además de tipos de datos básicos se transfieren Clases, sólo se pueden serializar las propiedades públicas de la misma.

Los servicios del tipo WCF son más flexibles. Se puede mandar prácticamente cualquier clase, estructura o propiedad, sean públicas o privadas, que son serializadas usando DataContract. Esto también incluye los tipos de datos involucrados, declarados de forma explícita.

En ambos casos el servicio se puede alojar en un servidor corriendo Internet Information Services (IIS).

Interoperabilidad Cross-Platform

Como el formato en el que se mandan los datos es XML, las aplicaciones que "consumen" el servicio pueden desarrollarse en cualquier lenguaje de programación, y ejecutarse en cualquier sistema operativo.

Page 2: UNIVERSIDAD DON BOSCO FACULTAD INGENIERIA · requiere pagar licencias ni royalties para usarlo). UDDI Abreviación de Universal Description, Discovery and Integration. Es un directorio

Por ejemplo, si se desarrolla una aplicación multiplataforma que informe al usuario su horóscopo diario, se puede separar la funcionalidad que elige el mensaje en un Web Service, y desarrollar un programa cliente para cada dispositivo que tenga que abarcar.

Se podría tener un cliente hecho en WinForms, una aplicación Web y una app de Android, todas ofreciendo la misma funcionalidad, ya que se estaría llamando al mismo servicio web en todos los casos.

Al desarrollar la lógica como servicio, se optimiza la reutilización de código, ya que no hay que volver a escribir lo mismo en distintos clientes. Tareas como traducción de texto, acceso a bases de dato, reportes, etc., suelen ser distribuídas en métodos que quedan centralizados en un solo servicio, accedido por uno o más clientes.

Servicios Web ASP.NET

Desarrollar un servicio web ASP.NET usando Visual Studio es bastante simple. La mayoría de las cuestiones más complejas ya vienen resueltas. Por ejemplo, el XML sigue el protocolo SOAP (Simple Object Access Protocol) como standard por default.

Si se desarrollan aplicaciones cliente con el mismo IDE, al agregar una referencia al servicio se arman automáticamente clases intermediarias que contienen métodos para dar formato muy fácilmente a los requests (pedidos) y los responses (respuestas).

De esta manera no debe ser preocupación dar formato al XML, ni armar estándares entre aplicaciones. Sólo basta con instanciar el objeto que representa al servicio, y llamar al método deseado pasándole parámetros normalmente.

Si por razones de compatibilidad o en una migración se necesita usar HTTP POST y HTTP GET, también se cuenta con herramientas para hacerlo (Estos últimos 2 protocolos están deshabilitados por default).

Tipos de datos soportados

Si se utiliza el protocolo SOAP, se podrá enviar y recibir usando los siguientes tipos de datos:

Tipos de datos primitivos: Byte, Byte[], Boolean, SByte, Double, DateTime, Decimal, Single, Int16, Int32, Int64,

XmlQualifiedName, String, UInt16, UInt32 y UInt64.

Clases y arrays de Clases: Deben tener al menos un constructor que no acepte parámetros, y serán serializadas

sus propiedades públicas. DataSets ADO.NET, XMLNodes.

Si en cambio se usa HTTP POST y HTTP GET, sólo se tendrá acceso a estos tipos de datos:

Tipos de datos primitivos: Boolean, Currency, DateTime, Decimal, Double, Int16, Int32, Int64, Single, String,

UInt16, Uint32 y UInt64. También arrays de cada tipo. Tipos Enumerables.

Tecnología Web Services

Los Web Services están construidos con varias tecnologías que trabajan conjuntamente con los estándares que están emergiendo para asegurar la seguridad y operatibilidad, de modo de hacer realidad que el uso combinado de varios Web Services, independiente de la o las empresas que los proveen, este garantizado. A continuación se describen brevemente los estándares que están ocupando los Web Services.

Page 3: UNIVERSIDAD DON BOSCO FACULTAD INGENIERIA · requiere pagar licencias ni royalties para usarlo). UDDI Abreviación de Universal Description, Discovery and Integration. Es un directorio

XML

Abreviación de Extensible Markup Language. El XML es una especificación desarrollada por W3C. Permite a los desarrolladores crear sus propios tags, que les posibilita habilitar definiciones, transmisiones, validaciones, e interpretación de los datos entre aplicaciones y entre organizaciones.

SOAP

Abreviación de Simple Object Access Protocol , es un protocolo de mensajería construido en XML que se usa para codificar información de los requerimientos de los Web Services y para responder los mensajes antes de enviarlos por la red. Los mensajes SOAP son independientes de los sistemas operativos y pueden ser transportados por los protocolos que funcionan en la Internet, como: SMTP, MIME y HTTP.

SOAP incluye un tipo de mensaje especial, denominado SOAP fault, que sirve para comunicar distintos tipos de error que se pueden producir en el paso de mensajes.

WSDL

Abreviación de Web Services Description Language, es un lenguaje especificado en XML que se ocupa para definir los Web Service como colecciones de punto de comunicación capaces de intercambiar mensajes. El WSDL es parte integral de UDDI y parte del registro global de XML, en otras palabras es un estándar de uso público (no se requiere pagar licencias ni royalties para usarlo).

UDDI

Abreviación de Universal Description, Discovery and Integration. Es un directorio distribuido que opera en la Web que permite a las empresas publicar sus Web Services, para que otras empresas conozcan y utilicen los Web Services que publican, opera de manera análoga a las páginas amarillas.

Componente de los servicios web

Servicio

La aplicación es ofrecida para ser utilizada por solicitantes que cumplen los requisitos especificados por el

proveedor de servicios. La implementación se realiza sobre una plataforma accesible en la red. El servicio se

Page 4: UNIVERSIDAD DON BOSCO FACULTAD INGENIERIA · requiere pagar licencias ni royalties para usarlo). UDDI Abreviación de Universal Description, Discovery and Integration. Es un directorio

describe a través de un lenguaje de descripción de servicio. Tanto la descripción como las políticas de uso han

sido publicadas de antemano en un registro.

Proveedor de Servicio

Desde el punto de vista comercial, es quien presta el servicio. Desde el punto de vista de arquitectura, es la

plataforma que provee el servicio.

Registro de Servicios

. Es un depósito de descripciones de servicios que puede ser consultado, donde los proveedores publican sus

servicios y los solicitantes encuentran los servicios y los detalles para utilizarlos.

Solicitante de servicios

Desde el punto de vista comercial, la empresa que requiere cierto servicio. Desde el punto de vista de la

arquitectura, la aplicación o cliente que busca e invoca un servicio.

La siguiente figura muestra las relaciones operacionales entre los componentes:

Arquitectura de un Servicio Web

¿Cómo se estructuran los servicios Web? Para el mundo exterior, un Servicio Web es una aplicación que acepta

peticiones de servicio, realiza algún proceso, y devuelve una respuesta.

La siguiente figura muestra la arquitectura interna de un servicio Web

Page 5: UNIVERSIDAD DON BOSCO FACULTAD INGENIERIA · requiere pagar licencias ni royalties para usarlo). UDDI Abreviación de Universal Description, Discovery and Integration. Es un directorio

Un Servicio Web contiene un Auditor (Listener) que está a la espera de peticiones. Cuando se recibe una petición, el auditor la reenvía a un componente que implementa la lógica de negocio requerida para la respuesta. El componente se puede diseñar para operar específicamente como un servicio Web o puede ser cualquier otro componente u objeto COM que el servicio quiera exponer al exterior. En este último caso, un desarrollador escribirá algún tipo de lógica que actuará como frente del servicio Web y enviará la petición al objeto COM mismo.

El objeto COM u otra lógica de negocio puede utilizar una base de datos u otro mecanismo de almacenamiento, al que se tiene acceso mediante una capa de acceso a Datos (Data Access layer). La capa de acceso a datos se utiliza para leer información de una base de datos. Sin embargo, no hay nada que impida al servicio Web obtener sus datos de otro servicio Web - ya sea un servicio Web genérico de tipo componente, o uno de uso específico.

Publicación y consumo de servicios Web

• Un proveedor parte de un desarrollo heredado o de un nuevo producto.

• El proveedor desarrolla y publica una interfase basada en un

• Servicio Web. Ésto incluye la publicación automática, en la Web, de un descriptor del servicio, en un

formato estándar XML.

• Un consumidor construye automáticamente, a partir del descriptor del servicio, las clases “proxy” o

“stub” que le permitirán acceder al Servicio Web desde sus aplicaciones.

• El consumidor desarrolla la parte cliente que consumirá el Servicio Web, usando las clases “proxy”.

Tecnología .NET

Microsoft .NET es una plataforma para generar, ejecutar y experimentar la próxima generación de aplicaciones distribuidas. Abarca clientes, servidores y herramientas de desarrollo.

Los servicios Web pueden ser específicos a una aplicación en concreto, sin embargo existe un gran número de servicios horizontales que la mayoría de las aplicaciones Web necesitan. Esto puede suministrarse mediante bloques de servicios Web. Un ejemplo es Microsoft Passport que pone a disposición una utilidad individualizada entre múltiples sitios Web.

Page 6: UNIVERSIDAD DON BOSCO FACULTAD INGENIERIA · requiere pagar licencias ni royalties para usarlo). UDDI Abreviación de Universal Description, Discovery and Integration. Es un directorio

El consumidor de un servicio Web puede ser un navegador de Internet, otro dispositivo con conexión a Internet, o una aplicación. Incluso un servicio Web puede en sí mismo ser consumidor de otro servicio Web de la misma forma que un componente COM puede utilizar otro componente como parte de su implementación y funcionamiento.

A continuación se muestra un esquema que representa el funcionamiento de los Servicios Web, como bloques en la plataforma .NET

La tecnología ASP.NET va a permitir crear estos servicios web o utilizarlos directamente llamándolos desde una aplicación. Cuando se crea un servicio web XML se expone la funcionalidad de la aplicación para que pueda ser usada por otros clientes. Hacer esto permite que otros clientes puedan usar el servicio web para acceder, enviar y procesar información contenida en el mismo.

Estos servicios pueden ser usados no sólo por otras aplicaciones web, sino también por aplicaciones de escritorio.

Cuando se implementa un servicio web con ASP.NET se debe colocar la etiqueta [web Method] al principio de cada método para que sean capaces de recibir las solicitudes del servicio web y devuelvan el resultado. La comunicación entre el cliente y el servicio web al que llama se produce , como se ha mencionado anteriormente, mediante el protocolo SOAP, se define como va a producirse el intercambio de información XML.

Por un lado el cliente enviará una petición SOAP y el servicio web le devolverá la respuesta SOAP, estando serializados todos los mensajes en XML para que pueda producirse la comunicación. En Visual Studio, crear servicios web (que tendrán extensión .asmx) es bastante sencillo. Todos ellos deberán tener la directiva:

Esta directiva indicará el lenguaje en el que estará escrito el archivo de respaldo en la propiedad Language . Las propiedades Codebehind y Class indican el nombre del archivo de respaldo y la clase a la que pertenece el servicio web respectivamente.

En el archivo de respaldo se podrá tener todos los métodos que se crean necesarios, pero como se dijo antes, todos deben llevar la etiqueta [webMethod] si se quiere que sean accesibles desde la web. También se debe especificar el espacio de nombres XML donde debería encontrarse nuestro servicio web, ya que los métodos que se implemente deben estar localizados en un espacio de nombres único para que puedan ser distinguidos de otros métodos que pertenezcan a otro servicio. Por defecto, el espacio de nombres usado es htt

Page 7: UNIVERSIDAD DON BOSCO FACULTAD INGENIERIA · requiere pagar licencias ni royalties para usarlo). UDDI Abreviación de Universal Description, Discovery and Integration. Es un directorio

p://tempuri.org, aunque sería más correcto usar alguno propio, como el nombre de nuestra compañía u organización

La siguiente figura muestra la creación de un servicio web XML de ejemplo en el IDE Visual Studio.

Ventajas y desventajas de los Servicios Web

Ventajas Desventajas

• Aporta interoperabilidad entre aplicaciones

de software independientemente de sus

propiedades o de las plataformas sobre las

que se instalen.

• Los servicios web fomentan los estándares y

protocolos basados en texto, que hacen más

fácil acceder a su contenido y entender su

funcionamiento.

• Al apoyarse en HTTP, los servicios web

pueden aprovecharse de los sistemas de

seguridad sin necesidad de cambiar las reglas

de filtrado.

• Permiten que servicios y software de

diferentes compañías ubicadas en diferentes

• Para realizar transacciones no pueden

compararse en su grado de desarrollo con los

estándares abiertos de computación

distribuida como CORBA.

• Su rendimiento es bajo si se compara con

otros modelos de computación distribuida,

tales como RMI, CORBA, o DCOM. Es uno de

los inconvenientes derivados de adoptar un

formato basado en texto. Y es que entre los

objetivos de XML no se encuentra la concisión

ni la eficacia de procesamiento.

• Existe poca información de servicios web para

algunos lenguajes de programación

Page 8: UNIVERSIDAD DON BOSCO FACULTAD INGENIERIA · requiere pagar licencias ni royalties para usarlo). UDDI Abreviación de Universal Description, Discovery and Integration. Es un directorio

III. MATERIALES Y EQUIPO

Para la realización de la guía de práctica se requerirá lo siguiente:

No. Requerimiento Cantidad

1 Guía de práctica #13: Aplicaciones con web service ASP 1

2 Computadora con Visual Studio 2012 instalado y una instancia de SQL Server con Management Studio Express

1

3 Memoria USB o disco flexible 1

IV. PROCEDIMIENTO

1. Proceda a descargar los recursos complementarios de esta práctica.

2. Inicie la herramienta de Microsoft SQL Server Management Studio instalado en su computadora Ubique a la base de datos “Agenda”. Si esta base de datos ya existe, proceda a eliminarla.

3. Entre los recursos proporcionado para esta guía, ubique el script ( bd13.sql ) y de doble clic sobre este

archivo. Luego, presione el botón “! Execute” y espere hasta que en el inferior muestre la confirmación

de consulta ejecutada exitosamente.

De clic secundario sobre la carpeta Databases del Explorer del Gestor SQL, seleccione opción Refresh y confirme que se ha creado la base de datos “Agenda”.

4. Retorne a los recursos de esta guía, para copia el archivo (WebService.rar) en la carpeta Mis Documentos. Descomprima el archivo y cargue el proyecto web proporcionado ahi.

5. Crear una conexión a la base de datos Agenda. En la página Elegir la conexión de datos del Asistente para la configuración de orígenes de datos, haga clic en Nueva conexión. Se produce una de las acciones siguientes: o Si ya ha creado una conexión de datos en Visual Studio, el cuadro de diálogo Agregar conexión se

abre. o Si se trata de la primera conexión de datos que crea en Visual Studio, se muestra el cuadro de diálogo

Elegir origen de datos. Seleccione el tipo de base de datos con el que desea conectarse y a continuación, haga clic en Aceptar para mostrar el cuadro de diálogo Agregar conexión.

6. En el cuadro de diálogo Agregar conexión, escriba la información solicitada. El cuadro de dialogo Agregar

conexión es diferente para cada tipo de proveedor de datos. 7. Haga clic en Aceptar en el cuadro de diálogo Agregar conexión.

lugares geográficos puedan ser combinados

fácilmente para proveer servicios integrados.

Page 9: UNIVERSIDAD DON BOSCO FACULTAD INGENIERIA · requiere pagar licencias ni royalties para usarlo). UDDI Abreviación de Universal Description, Discovery and Integration. Es un directorio

8. Ahora procederemos a agrega en tu sitio web a un archivo de clases de LinQ para SQL. 9. De clic secundario sobre el nombre del nuevo proyecto, seleccione Agregar y luego Nuevo elemento…

Del listado, seleccione la categoría Datos > Clases de LINQ to SQL. Asigne el nombre del archivo como AgendaDB.

10. Retorne a la ventana del Explorador de servidores, seleccione la conexión existente a la bdd Agenda y comience a arrastrar a cada una de las 3 tablas que contiene. Observe el resultado:

11. Ahora creará un servicio Web que nos permita, ingresar usuario y actividad en nuestra agenda, además de ver los usuarios y actividades por usuario.

12. En el Explorador de soluciones, haga clic con el botón secundario del mouse en el nombre del sitio Web actual y, a continuación, haga clic en Agregar nuevo elemento.

13. En Plantillas instaladas de Visual Studio para C#, ubique y haga clic en Servicio Web y a continuación, en el cuadro Nombre, escriba “wsAgenda”.

14. A continuación, haga clic en Agregar.

15. En el archivo wsAgenda.asmx procederemos a crear los web métodos y agregar las espacios de nombres

necesarios para nuestros métodos. Reemplace el código predeterminado por el siguiente código. using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Script.Serialization;

Page 10: UNIVERSIDAD DON BOSCO FACULTAD INGENIERIA · requiere pagar licencias ni royalties para usarlo). UDDI Abreviación de Universal Description, Discovery and Integration. Es un directorio

using System.Web.Services; namespace WebService { /// <summary> /// Descripción breve de wsAgenda /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] // Para permitir que se llame a este servicio web desde un script, usando ASP.NET AJAX, quite la marca de comentario de la línea siguiente. // [System.Web.Script.Services.ScriptService] public class wsAgenda : System.Web.Services.WebService { //Acceso a nuestra clase Linq AgendaDBDataContext agenda = new AgendaDBDataContext(); [WebMethod] public string GetActividad(string user) { string json = ""; //Consulta a varias tablas try { var vertodos = from c in agenda.Contacto join a in agenda.Actividad on c.Id_Contacto equals a.Id_Contacto join l in agenda.Login on a.Usuario equals l.Usuario where (c.Usuario == user) && (a.Usuario == user) && (l.Usuario == user) select new { Nombre = c.Nombre, Apellido = c.Apellido1, Fecha = a.Fecha, Descripcion = a.Descripcion, Usuario = c.Usuario }; JavaScriptSerializer jss = new JavaScriptSerializer(); json = jss.Serialize(vertodos); if (json.ToString() != "") { return json; } else { return "No tiene actividades programadas"; } }catch (Exception e) { Console.Write(e.StackTrace); return "Error en busqueda"; } } [WebMethod] public string GetLogin(string user, string pass) { string json = ""; //Consulta a varias tablas try { var permiso = from l in agenda.Login

Page 11: UNIVERSIDAD DON BOSCO FACULTAD INGENIERIA · requiere pagar licencias ni royalties para usarlo). UDDI Abreviación de Universal Description, Discovery and Integration. Es un directorio

where (l.Usuario == user) && (l.contrasenia == pass) select l.Usuario; JavaScriptSerializer jss = new JavaScriptSerializer(); json = jss.Serialize(permiso); if (json.ToString() != "[]") { return json; } else { return "Usuario o password invalido"; } }catch (Exception e) { Console.Write(e.StackTrace); return "Error en Conexion"; } } [WebMethod] public Boolean ingresarContacto(string nombre, string apellido, string correo, string telefono, string direccion, string usuario) { // Crear un nuevo objeto contacto Contacto cont = new Contacto { Nombre = nombre,Apellido1 = apellido, Correo = correo, Telefono = telefono, Direcion = direccion, Usuario = usuario }; // Agregar el nuevo objeto a collecion de Contactos. agenda.Contacto.InsertOnSubmit(cont); // Verifica si hay cambios en la base de datos try { agenda.SubmitChanges(); return true; }catch (Exception e) { Console.WriteLine(e); return false; } } [WebMethod] public Boolean ingresarActividad(int idc, DateTime fecha, string descripcion, string usuario) { // Crear un nuevo objeto Actividad Actividad act = new Actividad { Id_Contacto = idc, Fecha = fecha, Descripcion = descripcion, Usuario = usuario }; // Agregar el nuevo objeto a collecion de Actividad agenda.Actividad.InsertOnSubmit(act); // Verifica si hay cambios en la base de datos try { agenda.SubmitChanges(); return true; }catch (Exception e) { Console.WriteLine(e); return false; } } [WebMethod] public string buscaridContacto(string contacto, string apellido, string usu)

Page 12: UNIVERSIDAD DON BOSCO FACULTAD INGENIERIA · requiere pagar licencias ni royalties para usarlo). UDDI Abreviación de Universal Description, Discovery and Integration. Es un directorio

{ var json = ""; //Consulta a varias tablas try { var idcontacto = from c in agenda.Contacto where (c.Nombre == contacto) && (c.Apellido1 == apellido) && (c.Usuario == usu) select c.Id_Contacto; JavaScriptSerializer jss = new JavaScriptSerializer(); json = jss.Serialize(idcontacto); if (json.ToString() != "") { return json; } else { return "Usuario no ingresado"; } }catch (Exception e) { Console.Write(e.StackTrace); return "Error en la conexion"; } } [WebMethod] public string GetContacto(string usu) { var json = ""; try { var idcontacto = from c in agenda.Contacto where c.Usuario == usu select new { nombre = c.Nombre, apellido = c.Apellido1, telefono = c.Telefono, correo = c.Correo, direccion = c.Direcion }; JavaScriptSerializer jss = new JavaScriptSerializer(); json = jss.Serialize(idcontacto); if (json.ToString() != "") { return json; } else { return "No tiene contactos ingresados"; } }catch (Exception e) { Console.Write(e.StackTrace); return "Error en la conexion"; } } } }

Page 13: UNIVERSIDAD DON BOSCO FACULTAD INGENIERIA · requiere pagar licencias ni royalties para usarlo). UDDI Abreviación de Universal Description, Discovery and Integration. Es un directorio

16. Después de haber escrito las funciones anteriores, guarde el archivo.

17. A continuación, puede probar el servicio Web en Visual Web Developer. En el Explorador de soluciones, haga clic en wsAgenda.asmx y, a continuación, presione CTRL+F5.

18. Se invoca el servicio Web y aparece en el explorador una página que muestra los métodos que el servicio Web expone.

19. Haga clic en GetLogin, que llama al método. Aparece una página que le solicita valores de parámetros para el método GetLogin.

Page 14: UNIVERSIDAD DON BOSCO FACULTAD INGENIERIA · requiere pagar licencias ni royalties para usarlo). UDDI Abreviación de Universal Description, Discovery and Integration. Es un directorio

20. En el cuadro user escriba pedro, en el cuadro de pass escriba 123456 y, a continuación, haga clic en Invocar. Aparece una nueva ventana que muestra la página XML que el servicio Web devuelve cuando se invoca al método GetLogin. Aparece el valor del id de usuario en la página XML.

21. Cierre el explorador. Ha terminado de crear el servicio Web. El paso siguiente es utilizarlo. 22. Ahora que tiene un servicio Web, en nuestro sitio web haremos referencia al servicio que hemos creado

y lo utilizará. 23. En el menú Sitio web del Explorador de proyectos, haga clic en Agregar referencia de servicio. Aparecerá

el cuadro de diálogo Agregar referencia de servicio. 24. En la lista Dirección URL, escriba la dirección URL siguiente para el servicio Web y, a continuación, haga

clic en Ir:

http://localhost:49778/wsAgenda.asmx Se listan los servicios web disponibles, tal y como se muestra en la siguiente captura de pantalla.

25. En la opción inferior Espacio de nombres, escriba ServicioCliente. Haz clic en Aceptar.

26. Cuando Visual Web Developer encuentra el servicio Web, aparece información sobre el servicio Web en el cuadro de diálogo Agregar referencias Web.

27. Visual Web Developer crea una carpeta denominada App_WebReferences y le agrega una carpeta para la nueva referencia Web. De manera predeterminada, se asigna un espacio de nombres a las referencias Web correspondiente al nombre de su servidor. Anote el nombre del espacio de nombres de la referencia Web.

28. Ahora procederemos a llamar los métodos del servicio Web en nuestros web form, Abra la página Login.aspx y cambie a la vista Diseño.

29. Haga doble clic en BtnEntrar a fin de mostrar el controlador de eventos para el evento Click. Ahí reemplace al código existente por el siguiente:

Page 15: UNIVERSIDAD DON BOSCO FACULTAD INGENIERIA · requiere pagar licencias ni royalties para usarlo). UDDI Abreviación de Universal Description, Discovery and Integration. Es un directorio

protected void BtnEntrar_Click(object sender, EventArgs e) { string usuario; //agregar objeto servicio web ServicioCliente.wsAgendaSoapClient servicio = new ServicioCliente.wsAgendaSoapClient(); //invocaremos al metodo GetLogin de nuestro webservice usuario = servicio.GetLogin(TxtUsuario.Text, TxtPassword.Text); if ((usuario == "Usuario o password invalido") || (usuario == "Error en la conexion")) { LblError.Text = "*" + usuario; } else { String[] dato = usuario.Split('"'); //creamos sesion para utilizarla en toda la pagina web. Session.Add("usuario", dato[1]); Response.Redirect("Index.aspx"); } }

30. En el explorador de soluciones, ubique la página Index.aspx y luego ingrese al código C# del archivo Index.aspx.cs. Ubica el controlador de eventos para el evento Page_Load.

31. Reemplace el código del controlador de eventos Page_Load coincida con el código del siguiente ejemplo. 32.

protected void Page_Load(object sender, EventArgs e) { if(Session["usuario"]==null){ Response.Redirect("Login.aspx"); } Label1.Text="AGENDA "+(string)Session["usuario"]; }

33. Abra la página AgregarContacto.aspx y cambie a la vista Diseño. 34. Haga doble clic en cualquier parte del web form que este vacío, a fin de crear un controlador de eventos

para el evento Load.

35. Puesto que convertiremos los datos xml a json para manejar los datos de forma sencilla, debemos agregar el siguiente espacio de nombre a la clase AgregarContacto.aspx.cs:

using System.Web.Script.Serialization;

36. Luego, asegúrese de que el código del controlador de eventos Page_Load coincida con el código del siguiente ejemplo.

protected void Page_Load(object sender, EventArgs e) { if (Session["usuario"] == null) { Response.Redirect("Login.aspx"); } Label2.Text = "AGENDA " + (string)Session["usuario"]; }

Page 16: UNIVERSIDAD DON BOSCO FACULTAD INGENIERIA · requiere pagar licencias ni royalties para usarlo). UDDI Abreviación de Universal Description, Discovery and Integration. Es un directorio

37. Haga doble clic en BtnGuardar a fin de crear un controlador de eventos para el evento Click. 38. Dentro del código del controlador de eventos, escriba el código a continuación:

protected void BtnGuardar_Click(object sender, EventArgs e) { var usuario = Label2.Text.Split(' '); Boolean ingresar; bool existe = false; string mensaje; var jsonText = ""; //agregar objeto servicio web ServicioCliente.wsAgendaSoapClient servicio = new ServicioCliente.wsAgendaSoapClient(); //invocaremos al metodo GetLogin de nuestro webservice jsonText = servicio.GetContacto((string)Session["usuario"]); //verificacion de ingreso. var jss = new JavaScriptSerializer(); dynamic result = jss.DeserializeObject(jsonText); for (int i = 0; i < result.Length; i++) { if (result[i]["nombre"] == inputNombre.Text && result[i]["apellido"] == inputApellido.Text) { existe = true; break; } else { existe = false; } } if (existe) { LblError.Text += "* Usuario ingresado"; return; } else { //agregar objeto servicio web ServicioCliente.wsAgendaSoapClient servicio1 = new ServicioCliente.wsAgendaSoapClient(); //invocaremos al metodo ingresarContacto de nuestro webservice ingresar = servicio1.ingresarContacto(inputNombre.Text, inputApellido.Text, inputCorreo.Text, inputTel.Text, inputDireccion.Text, (string)Session["usuario"]); //verificacion de ingreso. if (ingresar) { mensaje = "Contacto agregado exitosamente"; inputApellido.Text = ""; inputNombre.Text = ""; inputCorreo.Text = ""; inputTel.Text = ""; inputDireccion.Text = ""; }else { mensaje = "Error al ingresar contacto"; inputApellido.Text = ""; inputNombre.Text = ""; inputCorreo.Text = ""; inputTel.Text = ""; inputDireccion.Text = ""; } Response.Write("<script type='text/javascript'>// <![CDATA[alert(\"" + mensaje + "\")//]]></ script > "); } }

Page 17: UNIVERSIDAD DON BOSCO FACULTAD INGENIERIA · requiere pagar licencias ni royalties para usarlo). UDDI Abreviación de Universal Description, Discovery and Integration. Es un directorio

39. Abra la página AgregarActividad.aspx y cambie a la vista Diseño. 40. Haga doble clic en cualquier parte del web form que este vacío, a fin de crear un controlador de eventos

para el evento Load. 41. Debemos agregar el siguiente espacio de nombre a la clase AgregarActividad.aspx.cs, puesto que

convertiremos los datos xml a json para manejar los datos de forma sencilla a través del siguiente espacio de nombre: using System.Web.Script.Serialization; using System.Runtime.Serialization.Json;

42. Asegúrese de que el código del controlador de eventos Page_Load coincida con el código del siguiente ejemplo.

int i; protected void Page_Load(object sender, EventArgs e) { if (Session["usuario"] == null) { Response.Redirect("Login.aspx"); } Label2.Text = "AGENDA " + (string)Session["usuario"]; for (i = 1; i < 32; i++) { ddldia.Items.Add(i.ToString()); } for (i = 1; i < 13; i++) { ddlmes.Items.Add(i.ToString()); } for (i = 2020; i < 2050; i++) { ddlanio.Items.Add(i.ToString()); } var jsonText = ""; //agregar objeto servicio web ServicioCliente.wsAgendaSoapClient servicio = new ServicioCliente.wsAgendaSoapClient(); //invocaremos al metodo GetLogin de nuestro webservice jsonText = servicio.GetContacto((string)Session["usuario"]); //verificacion de ingreso. var jss = new JavaScriptSerializer(); dynamic result = jss.DeserializeObject(jsonText); for (int i = 0; i < result.Length; i++) { ddlcontacto.Items.Add(result[i]["nombre"] + " " + result[i]["apellido"]); } }

Page 18: UNIVERSIDAD DON BOSCO FACULTAD INGENIERIA · requiere pagar licencias ni royalties para usarlo). UDDI Abreviación de Universal Description, Discovery and Integration. Es un directorio

43. Haga doble clic en BtnGuardar a fin de crear un controlador de eventos para el evento Click. 44. Asegúrese de que el código del controlador de eventos coincida con el código del siguiente ejemplo.

protected void BtnGuardar_Click(object sender, EventArgs e) { Boolean ingresar; string mensaje, idusuario, fecha, d; int id; DateTime f; fecha = ddlanio.Text + "/" + ddlmes.Text + "/" + ddldia.Text; f = Convert.ToDateTime(fecha); d = ddlcontacto.Text; var datos = d.Split(' '); //agregar objeto servicio web ServicioCliente.wsAgendaSoapClient servicio = new ServicioCliente.wsAgendaSoapClient(); //invocaremos al metodo GetLogin de nuestro webservice idusuario=servicio.buscaridContacto(datos[0],datos[1],(string)Session["usuario"]); idusuario = idusuario.Replace("[", "").Replace("]",""); id = Convert.ToInt32(idusuario); ingresar = servicio.ingresarActividad(id, f, inputDescripcion.Text, (string)Session["usuario"]); //verificacion de ingreso. if (ingresar) { mensaje = "Contacto agregado exitosamente"; inputDescripcion.Text = ""; } else { mensaje = "Error al ingresar Actividad"; } Response.Write("<script type='text/javascript'>// <![CDATA[alert(\"" + mensaje + "\")//]]></ script > "); }

45. Abra la página VerActividad.aspx y cambie a la vista Diseño. 46. Haga doble clic en cualquier parte del web form que este vacío, a fin de crear un controlador de eventos

para el evento Load. 47. Debemos agregar el siguiente espacio de nombre a la clase VerActividad.aspx.cs, puesto que

convertiremos los datos xml a json para manejar los datos de forma sencilla a través del siguiente espacio de nombre: using System.Web.Script.Serialization; using System.Runtime.Serialization.Json; using System.Data;

48. Asegúrese de que el código del controlador de eventos de Page_Load coincida con el código del siguiente ejemplo.

Page 19: UNIVERSIDAD DON BOSCO FACULTAD INGENIERIA · requiere pagar licencias ni royalties para usarlo). UDDI Abreviación de Universal Description, Discovery and Integration. Es un directorio

protected void Page_Load(object sender, EventArgs e) { if (Session["usuario"] == null) { Response.Redirect("Login.aspx"); } Label2.Text = "AGENDA " + (string)Session["usuario"]; var jsonText = ""; //agregar objeto servicio web ServicioCliente.wsAgendaSoapClient servicio = new ServicioCliente.wsAgendaSoapClient(); //invocaremos al metodo GetLogin de nuestro webservice jsonText = servicio.GetActividad((String)Session["usuario"]); //verificacion de ingreso. var jss = new JavaScriptSerializer(); dynamic result = jss.DeserializeObject(jsonText); DataTable Dt = new DataTable(); Dt.Columns.Add("Contacto"); Dt.Columns.Add("Fecha"); Dt.Columns.Add("Descripción"); for (int i = 0; i < result.Length; i++) { DataRow Fila = Dt.NewRow(); Fila["Contacto"] = result[i]["Nombre"] + " " + result[i]["Apellido"]; Fila["Fecha"] = result[i]["Fecha"]; Fila["Descripción"] = result[i]["Descripcion"]; Dt.Rows.Add(Fila); } GridView1.DataSource = Dt; GridView1.DataBind(); }

49. Abra la página VerContacto.aspx y cambie a la vista Diseño. 50. Haga doble clic en cualquier parte del web form que este vacío, a fin de crear un controlador de eventos

para el evento Load. 51. Debemos agregar el siguiente espacio de nombre a la clase VerContacto.aspx.cs, puesto que

convertiremos los datos xml a json para manejar los datos de forma sencilla a través del siguiente espacio de nombre: using System.Web.Script.Serialization; using System.Runtime.Serialization.Json; using System.Data;

52. Asegúrese de que el código del controlador de eventos Page_Load coincida con el código del siguiente ejemplo.

Page 20: UNIVERSIDAD DON BOSCO FACULTAD INGENIERIA · requiere pagar licencias ni royalties para usarlo). UDDI Abreviación de Universal Description, Discovery and Integration. Es un directorio

protected void Page_Load(object sender, EventArgs e) { int i = 0; if (Session["usuario"] == null) { Response.Redirect("Login.aspx"); } Label2.Text = "AGENDA " + (string)Session["usuario"]; var jsonText = ""; //agregar objeto servicio web ServicioCliente.wsAgendaSoapClient servicio = new ServicioCliente.wsAgendaSoapClient(); //invocaremos al metodo GetLogin de nuestro webservice jsonText = servicio.GetContacto((String)Session["usuario"]); //verificacion de ingreso. var jss = new JavaScriptSerializer(); dynamic result = jss.DeserializeObject(jsonText); DataTable Dt = new DataTable(); Dt.Columns.Add("Contacto"); Dt.Columns.Add("Correo"); Dt.Columns.Add("Telefono"); Dt.Columns.Add("Direccion"); for (i = 0; i < result.Length; i++) { DataRow Fila = Dt.NewRow(); Fila["Contacto"] = result[i]["nombre"] + " " + result[i]["apellido"]; Fila["Correo"] = result[i]["correo"]; Fila["Telefono"] = result[i]["telefono"]; Fila["Direccion"] = result[i]["direccion"]; Dt.Rows.Add(Fila); } GridView1.DataSource = Dt; GridView1.DataBind(); }

53. Abra la página Salir.aspx y cambie a la vista Diseño. 54. Haga doble clic en cualquier parte del web form que este vacío, a fin de crear un controlador de eventos

para el evento Page_Load. 55. Asegúrese de que el código del controlador de eventos coincida con el código del siguiente ejemplo.

protected void Page_Load(object sender, EventArgs e) { if (Session["usuario"] == null) { Response.Redirect("Login.aspx"); } Label2.Text = "AGENDA " + (string)Session["usuario"]; }

56. Haga doble clic en Button1 a fin de crear un controlador de eventos para el evento Click. 57. Asegúrese de que el código del controlador de eventos coincida con el código del siguiente ejemplo.

Page 21: UNIVERSIDAD DON BOSCO FACULTAD INGENIERIA · requiere pagar licencias ni royalties para usarlo). UDDI Abreviación de Universal Description, Discovery and Integration. Es un directorio

protected void Button1_Click(object sender, EventArgs e) { Session.Remove("Usuario"); Response.Redirect("Login.aspx"); }

58. Haga doble clic en BtnCancelar a fin de crear un controlador de eventos para el evento Click. 59. Asegúrese de que el código del controlador de eventos coincida con el código del siguiente ejemplo.

protected void BtnCancelar_Click(object sender, EventArgs e) { Response.Redirect("Index.aspx"); }

60. Retorne a la ventana del proyecto de Visual Studio y proceda a ejecutar la página Index.aspx. Ingrese con un usuario y contraseña de usuario ya registrado

V. BIBLIOGRAFÍA

1. Thierry GROUSSARD. (2013). C# 5: Los fundamentos del lenguaje – Desarrollar con Visual Studio 2012 . Barcelona: ENI.

2. http://dsc.itmorelia.edu.mx/~jcolivares/documents/manual_webservices.pdf

3. http://www.nebaris.com/post/40/web-services-en-c-sharp