Está en la página 1de 21

UNIVERSIDAD DON BOSCO

FACULTAD INGENIERIA
COORDINACION DE COMPUTACIÓN
GUIA DE LABORATORIO #7
Nombre de la Práctica: Aplicaciones con Web Service ASP
CICLO: 01/2020 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.
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.
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
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
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.
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
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 • Para realizar transacciones no pueden


de software independientemente de sus compararse en su grado de desarrollo con los
propiedades o de las plataformas sobre las estándares abiertos de computación
que se instalen. distribuida como CORBA.

• Los servicios web fomentan los estándares y • Su rendimiento es bajo si se compara con
protocolos basados en texto, que hacen más otros modelos de computación distribuida,
fácil acceder a su contenido y entender su tales como RMI, CORBA, o DCOM. Es uno de
funcionamiento. los inconvenientes derivados de adoptar un
formato basado en texto. Y es que entre los
• Al apoyarse en HTTP, los servicios web
objetivos de XML no se encuentra la concisión
pueden aprovecharse de los sistemas de
ni la eficacia de procesamiento.
seguridad sin necesidad de cambiar las reglas
de filtrado. • Existe poca información de servicios web para
algunos lenguajes de programación
• Permiten que servicios y software de
diferentes compañías ubicadas en diferentes
lugares geográficos puedan ser combinados
fácilmente para proveer servicios integrados.

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 1
Server con Management Studio Express
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.
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;
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
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)
{
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";
}
}
}
}
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.
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:
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"];
}
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 > ");
}
}
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"]);
}
}
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.
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.
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.
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

También podría gustarte