Está en la página 1de 15

Programacin en capas / Web Service

2-2017

Caso de estudio
Una famosa empresa que realiza anlisis de video juegos desea implementar una nueva
funcionalidad en la que los usuarios (miembros de un equipo evaluador de juegos) podrn poner una
nota a dichos juegos.

Base de datos

Usuario (ci, Nick, edad, avatar)

Analisis(id,nombre del juego,ci,nota)

Juego (nombre del juego,empresadesarrollo)

Usuario.- La tabla usuarios almacenara los datos de los usarios que se registren al sistema, quienes
posteriormente se identificaran solo utilizando su ci, adicionalmente los usuarios podrn almacenar
su avatar.

Juego.- En esta tabla tendremos la lista de juegos que se evaluaran.

Analisis.- usuario almacenara el juego, el ci y la nota con la que el usuario lo haya calificado.

Desarrollo del proyecto


Ingreso de usuarios (usuarios.aspx):

Los usuarios llenan todos los datos y opcionalmente suben una imagen

Realizar anlisis (analisis.aspx):

Se selecciona el nombre del juego y el ci del usuario para poder dar una nota al juego seleccionado.

Ver juegos (juegos.aspx):

Permite ver un listado de todos los juegos.

Buscar juegos (buscarjuegos.aspx):

Permite ver un listado de los juegos y notas que ha puesto segn el id especificado.

Menu (default.aspx)

Permite navegar a las pginas descritas anteriormente.

Ingresar juegos (ingresarjuegos.aspx)


Nos permitir ingresar nuevos juegos

Procedimiento
Crear una base de datos llamada Anlisis con las respectivas tablas descritas en la anterior pgina.

Nota: Crear la base de datos en Sql Server2008 R2 o el que tengan instalado en su equipo.

Crear un nuevo proyecto llamado anlisis.

Dentro de este proyecto crear una pgina llamada usuarios.aspx, analisis.aspx, juegos.aspx,
buscarjuegos.aspx, ingresarjuegos.aspx, default.aspx

Diseo de las pginas

Usuarios.aspx

Disear la pgina de acuerdo a los campos creados en nuestra tabla de usuarios

Label1 CI

Label2-Nick

Label3 Edad

Label4Avatar

Label5 Mensaje correcto-incorrecto

3 TextBoxes y para el avatar un control FileUpload

1 botn Aceptar

Un link button que este direccionado a la pgina default.aspx, para esto cambiamos la propiedad
PostBack Url del link button y seleccionamos la pgina default.aspx.

Analisis.aspx

En la pgina de anlisis se podr seleccionar un ci, un nombre de juego y una nota.

Juegos.aspx

Simplemente un listado de los juegos ingresados.


Comencemos con la programacin

Hacemos click derecho sobre nuestra solucin, luego agregar nuevo sitio web y seleccionamos
servicio web

Debemos verificar que nuestro .Net framework sea 3.5 y le cambiamos el nombre a
serviciowebjuegos
Nuestra estructura debe quedar como se muestra en la siguiente figura:

Hacemos click derecho sobre APP_Code, agregar nuevo elemento y buscamos un dataset y le
cambiamos el nombre a DSjuegos, si nos aparece la ventana del wizard le decimos Cancel.

Conexin a la base de datos

En el explorador de servidores (cntrl + alt + s )hacemos click derecho sobre conexin de datos y
luego click en Agregar conexin.
Seguimos paso a paso el wizard. (Si tiene dudas en este punto consultar con el Docente)

Una vez que tenemos agregada nuestra base de datos desde SQL Server 2008 R2, debemos jalar las
tablas a nuestro dataset. (Simplemente haciendo click en la tabla y jalndola al dataset).

Siguiente Paso: Click derecho sobre JuegosTable Adapter y seleccionamos


configurar, hacemos click en siguiente hasta llegar a la siguiente ventana
Cambiamos los nombres a: Nombre de mtodo: FillJuegos y GetData por GetDataJuegos, nuetro
table adapter debera quedar asi:

Repetimos este proceso para UsuariosTableAdapter y nuestro table adapter debera quedar asi

Para AnalisisTableAdapter es diferente porque recordemos que queremos buscar datos de esta tabla
entonces el proceso es el siguiente:

Paso 1: Click derecho en AnalisisTableAdapter , seleccionamos configurar

Paso 2: Hacemos click en Generador de consultas

Paso 3: Modificar el query : SELECT nombrejuego,ci,nota

FROM anlisis

WHERE ci = @ci

Y hacemos click en ejecutar query


Paso 4: Aceptar y luego cambiamos los nombres por fillbuscarjuegos y getdatabuscar juegos.

Paso 5: Siguiente y finalizar.

Siguiente paso agregar una clase:

Paso 1: Click derecho sobre App_Code, agregar nuevo elemento y agregamos una clase y le
cambiamos el nombre a USUARIOS.cs

Dentro de esta clase estar el mtodo que nos ayudara a ingresar a un usuario a la base de datos.

Antes debemos guardar nuestro proyecto

Luego agregamos la siguiente lnea: using DSjuegosTableAdapters;


Ahora agreguemos el mtodo:

Public Boolean ingresaUsuarios(String nci, String nNick, int nEdad, String nAvatar)
{
usuariosTableAdapter usuario = new usuariosTableAdapter();
try{
usuario.Insert(nci, nNick, nEdad, Navatar);
return true;
}
Catch(Exception ex)
{
Console.Write(ex.StackTrace);
Return false
}
}
Paso 2: Click derecho sobre APP_Code, agregar nuevo elemento y agregamos una clase y le
cambiamos el nombre a JUEGOS.cs

Agregamos la siguiente lnea: using DSJuegosTableAdapter;

Agregamos los siguientes mtodos:

Y tambin:

Paso 3: Click derecho sobre App_Code, agregar nuevo elemento y agregamos una clase y le
cambiamos el nombre a ANALISIS.cs

Agregamos la siguiente lnea: using DSJuegosTableAdapter;

Agregamos los siguientes mtodos:

Public dsjuegos.analisisDataTable obtnerjuegosporci(string ci)

analisisTableAdapter anlisis = new analisiTablaAdapter();

return analisis.GetDataBuscarjuegos(nci);
}

Public Boolean insertarAnalisis(string nNombreJuego, String nci, int nNota)


{
analisisTableAdapter analisis = new analisisTableAdapter();
try {
analisis.Insert(nNombre, nci, nNota);
return true;
}catch(Exception ex){
Console.Write(ex.StackTrace);
Return false;
}
}

Agregando methods al WebService


Debemos agregar [webMethods a nuestro servicio]

Paso 1.- Doble click sobre nuestro servicio web

Primero Agregamos el metodo para ingresar usuarios


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using DSjuegosTableAdapters;
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment
the following line.
// [System.Web.Script.Services.ScriptService]

public class Service : System.Web.Services.WebService


{
public Service () {

//Uncomment the following line if using designed components


//InitializeComponent();
}

[WebMethod]
public string HelloWorld() {
return "Hello World";
}
//web method para usuarios
[WebMethod]
//nuestro metodo en la clase usuarios es de tipo Boolean por lo tanto
// aca tambien tiene que ser de tipo Boolean, le damos cualquier nombre en est caso
// ingresar usuarios y pedimos todos los paramteros necesarios para
// insertar un usuario
public Boolean ingresarusuarios(string nci, string nnick, string nedad, string
navatar)
{
//Creamos una instacia (usuario)de nuestra clase usuarios
usuarios usuario = new usuarios();
//en una variable resultado de tipo boolean guardamos el resultado
// del metodo llamado ingrsarusaurios (nombr del metodo en nuestra clase
usuarios)
//el objeto usuario al invocar al metodo ingrsarusaurios debe mandarle los
parametros ncesarios
Boolean resultado = usuario.ingrsarusaurios(nci, nnick, nedad, navatar);
//retornamos resultado
return resultado;
}
//Juegos
[WebMethod]
//Crear un metodo para obtenerjuegos
public DSjuegos.juegosDataTable obtenerjuegos()
{
//Creamos una instancia de la clase juegos llamado juego
juegos juego = new juegos();
//con el objeto juego invocamos al metodo obtenerJuegos que se creo en la
clase juegos.cs
return juegos.obtenerJuegos();

}
[WebMethod]//Metodo para ingresar juegos
public Boolean ingresarjuegos (string nnombrejuego, string nempdesarrollo)
{
juegos juego = new juegos();
Boolean resultado = juego.ingresarjuegos( nnombrejuego, nempdesarrollo);
return resultado;
}
//Analisis
[WebMethod]//metodo para buscar un juego por ci
public DSjuegos.analisisDataTable obtenerjuegosporci (string nci)
{
analisis analisis = new analisis();
return analisis.obtenerjuegosporci(nci);
}
[WebMethod]//metodo para ingresar un analisis
public Boolean ingresaranalisis(string nnombrejuego,string nci, string nnota)
{
analisis analisis = new analisis();
Boolean resultado = analisis.insertaranalisis(nnombrejuego,nci,nnota);
return resultado;
}
}

Siguiente paso debemos asegurarnos de que nuestra cadena de


conexin este en el web.config del servicio web
Paso 1.- Click derecho sobre el web.config del sitio web

Verificamos que la cadena de conexin sea la adecuada, es decir la que conecta con nuestra base de
datos.

<add name="AnalisisConnectionString" connectionString="Data Source=VLADIMIR-PC;Initial


Catalog=Analisis;Integrated Security=True"

Referencia a nuestro servicio web


Click derecho sobre nuestro proyecto, agregar referencia web.
Hacer click en servicios web en esta solucin y nos aparecer la siguiente ventana

Le cambiamos el nombre a nuestra referencia (serviciowebjuegos) tal y como hicimos en la gua de


servicios web y luego hacemos click en agregar referencia.

Programemos nuestros botones


Hacemos doble click en el botn ingresar del formulario usuarios.aspx

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
//Debemos agregar nuestro servicio web
using serviciowebjuegos;
namespace WebApplication3
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string ci = string.Empty();
string nick = string.Empty();
int edad = 0;
string avatar = string.Empty();
ci = texbox1.text;
nick = textbox2.text;
edad = Int32.Parse(textbox3.text);
avatar = FileUpload.FileName;
//Instanciamos el servicio web (Service)
Service servicio = new Service();
// invocamos el webmethod insertar usuarios y le mandamos los parametros
adecaudos
//el resultado lo guardamos en la variable resultado
Boolean resultado = servicio.insertarusuarios(ci, nick, edad, avatar);
//el rsultado es true mostramos el mensaje de correcto
if (resultado == true)
{
labelmensaje.text = "Correcto";
}
//si el resultado es false mostramos el mensaje de incorrecto
else
{
labelmensaje.text = "error";
}
}
}
}

Ahora trabajemos con la pgina juegos la cual solamente tiene que


listar nuestros juegos.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
//agregamos nuestro servicio web
using serviciowebjuegos;
namespace WebApplication3
{
public partial class WebForm2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//instanciamos nuestro servicio web
Service servicio = new Service();
//al DataSource de neutro datagrid le asignamos el webmethod obtenerjuego()
datagridview.DataSource = servicio.obtenerjuego();
//Hacemos un data bind para que nuestro datagrid view se muestre con los valores de
nuestra tabla
datagridView.DataBind();
}
}
}

Ahora trabajemos con el botn de ingresar juegos


//agregamos nuestro servicio web
using serviciowebjuegos;

protected void Button1_Click(object sender, EventArgs e)


{
string nombrejuego = string.Empty;
string empdesarrollo = string.Empty;

nombrejuego = TextBox1.Text;
empdesarrollo = TextBox2.Text;

Service servicio = new Service();


Boolean resultado = servicio.ingresarjuegos(nombrejuego, empdesarrollo);

if (resultado == true)
{
Label1.text = "Correcto";
}
else
{
Label1.text = "Incorrecto";
}
}

Ahora trabajemos con el botn buscar de la pgina buscarjuegos.aspx

protected void Button1_Click(object sender, EventArgs e)


{
if (TextBox1.Text != "")
{
Service servicio = new Service();
datagridview.Visible = true;
datagridview.DataSource = servicio.obtenerjuegosporci(TextBox1.Text);
datagridview.DataBind();
}
}