Sie sind auf Seite 1von 46

MANUAL DE

WEB SERVICE
RESTFUL EN
.NET
Cndor Xavier, Muentes Andrs

UNIVERIDAD DE LAS FUERZAS ARMADAS -ESPE

MANUAL APLICACIONES WEB


RESTFUL .NET
Contenido
BASE DE DATOS.............................................................................................. 2
APLICACIN SERVIDOR................................................................................. 11
APLICACIN CLIENTE.................................................................................... 31
PRUEBAS APLICACIN FUNCIONAL...............................................................39

BASE DE DATOS
1. Para el problema propuesto se ha planteado el siguiente modelo.
DETALLE_FACTURA
DET_CODIGO
FAC_CODIGO
PROV_CODIGO
PRO_CODIGO
PRO_NOMBRE
PRO_PRECIO_UNITARIO
DET_CANTIDAD
DET_SUBTOTAL
...

int
<pk>
int
<fk1>
int
<fk2>
int
int
numeric(8,2)
int
numeric(8,2)

PROVEEDOR
PROV_CODIGO
PROV_NOMBRE
PROV_DIRECCION
PROV_TELEFONO
PROV_RUC
PROV_CORREO
...

FACTURA
FAC_CODIGO
CLIEN_CODIGO
FAC_FECHA
FAC_IVA
FAC_TOTAL
...

int
<pk>
int
<fk>
datetime
numeric(8,2)
numeric(8,2)

CLIENTE
CLIEN_CODIGO
CLIEN_CEDULA
CLI_NOMBRE
CLI_APELLIDO
CLI_DIRECCION
...

PRODUCTO
PRO_CODIGO
EMP_RUC
PRO_NOMBRE
PRO_DESCRIPCION
PRO_PRECIO_UNITARIO
PRO_STOCK
...

int
<pk>
varchar(50)
varchar(100)
varchar(10)
varchar(13)
varchar(50)

int
<pk>
varchar(13) <fk>
varchar(50)
varchar(150)
numeric(8,2)
int

int
<pk>
varchar(13)
varchar(50)
varchar(50)
varchar(50)

EMPRESA
EMP_RUC
EMP_NOMBRE
EMP_DIRECCION
EMP_TELEFONO
EMP_CORREO
...

varchar(13) <pk>
varchar(50)
varchar(100)
varchar(10)
varchar(50)

El script de la base de datos planteada quedar as:


/
*=============================================
=================*/
/* DBMS name:
Microsoft SQL Server 2008
*/
/* Created on:
27/11/2015 23:07:46
*/
/
*=============================================
=================*/
if exists (select 1
from sys.sysreferences r join sys.sysobjects o on (o.id = r.constid and
o.type = 'F')
where r.fkeyid = object_id('DETALLE_FACTURA') and o.name =
'FK_DETALLE__REFERENCE_FACTURA')
alter table DETALLE_FACTURA
drop constraint FK_DETALLE__REFERENCE_FACTURA
go

if exists (select 1
from sys.sysreferences r join sys.sysobjects o on (o.id = r.constid and
o.type = 'F')
where r.fkeyid = object_id('DETALLE_FACTURA') and o.name =
'FK_DETALLE__REFERENCE_PROVEEDO')
alter table DETALLE_FACTURA
drop constraint FK_DETALLE__REFERENCE_PROVEEDO
go
if exists (select 1
from sys.sysreferences r join sys.sysobjects o on (o.id = r.constid and
o.type = 'F')
where r.fkeyid = object_id('FACTURA') and o.name =
'FK_FACTURA_REFERENCE_CLIENTE')
alter table FACTURA
drop constraint FK_FACTURA_REFERENCE_CLIENTE
go
if exists (select 1
from sys.sysreferences r join sys.sysobjects o on (o.id = r.constid and
o.type = 'F')
where r.fkeyid = object_id('PRODUCTO') and o.name =
'FK_PRODUCTO_REFERENCE_EMPRESA')
alter table PRODUCTO
drop constraint FK_PRODUCTO_REFERENCE_EMPRESA
go
if exists (select 1
from sysobjects
where id = object_id('CLIENTE')
and type = 'U')
drop table CLIENTE
go
if exists (select 1
from sysobjects
where id = object_id('DETALLE_FACTURA')
and type = 'U')
drop table DETALLE_FACTURA
go
if exists (select 1
from sysobjects
where id = object_id('EMPRESA')
and type = 'U')
drop table EMPRESA
go
if exists (select 1
from sysobjects
where id = object_id('FACTURA')
and type = 'U')
drop table FACTURA
go
3

if exists (select 1
from sysobjects
where id = object_id('PRODUCTO')
and type = 'U')
drop table PRODUCTO
go
if exists (select 1
from sysobjects
where id = object_id('PROVEEDOR')
and type = 'U')
drop table PROVEEDOR
go
/
*=============================================
=================*/
/* Table: CLIENTE
*/
/
*=============================================
=================*/
create table CLIENTE (
CLIEN_CODIGO
int
identity,
CLIEN_CEDULA
varchar(13)
null,
CLI_NOMBRE
varchar(50)
null,
CLI_APELLIDO
varchar(50)
null,
CLI_DIRECCION
varchar(50)
null,
constraint PK_CLIENTE primary key (CLIEN_CODIGO)
)
go
/
*=============================================
=================*/
/* Table: DETALLE_FACTURA
*/
/
*=============================================
=================*/
create table DETALLE_FACTURA (
DET_CODIGO
int
identity,
FAC_CODIGO
int
null,
PROV_CODIGO
int
null,
PRO_CODIGO
int
null,
PRO_NOMBRE
int
null,
PRO_PRECIO_UNITARIO numeric(8,2)
null,
DET_CANTIDAD
int
null,
DET_SUBTOTAL
numeric(8,2)
null,
constraint PK_DETALLE_FACTURA primary key (DET_CODIGO)
)
go

/
*=============================================
=================*/
/* Table: EMPRESA
*/
/
*=============================================
=================*/
create table EMPRESA (
EMP_RUC
varchar(13)
not null,
EMP_NOMBRE
varchar(50)
null,
EMP_DIRECCION
varchar(100)
null,
EMP_TELEFONO
varchar(10)
null,
EMP_CORREO
varchar(50)
null,
constraint PK_EMPRESA primary key (EMP_RUC)
)
go
/
*=============================================
=================*/
/* Table: FACTURA
*/
/
*=============================================
=================*/
create table FACTURA (
FAC_CODIGO
int
identity,
CLIEN_CODIGO
int
null,
FAC_FECHA
datetime
null,
FAC_IVA
numeric(8,2)
null,
FAC_TOTAL
numeric(8,2)
null,
constraint PK_FACTURA primary key (FAC_CODIGO)
)
go
/
*=============================================
=================*/
/* Table: PRODUCTO
*/
/
*=============================================
=================*/
create table PRODUCTO (
PRO_CODIGO
int
identity,
EMP_RUC
varchar(13)
null,
PRO_NOMBRE
varchar(50)
null,
PRO_DESCRIPCION
varchar(150)
null,
PRO_PRECIO_UNITARIO numeric(8,2)
null,
PRO_STOCK
int
null,
constraint PK_PRODUCTO primary key (PRO_CODIGO)
)
go

/
*=============================================
=================*/
/* Table: PROVEEDOR
*/
/
*=============================================
=================*/
create table PROVEEDOR (
PROV_CODIGO
int
identity,
PROV_NOMBRE
varchar(50)
null,
PROV_DIRECCION
varchar(100)
null,
PROV_TELEFONO
varchar(10)
null,
PROV_RUC
varchar(13)
null,
PROV_CORREO
varchar(50)
null,
constraint PK_PROVEEDOR primary key (PROV_CODIGO)
)
go
alter table DETALLE_FACTURA
add constraint FK_DETALLE__REFERENCE_FACTURA foreign key
(FAC_CODIGO)
references FACTURA (FAC_CODIGO)
go
alter table DETALLE_FACTURA
add constraint FK_DETALLE__REFERENCE_PROVEEDO foreign key
(PROV_CODIGO)
references PROVEEDOR (PROV_CODIGO)
go
alter table FACTURA
add constraint FK_FACTURA_REFERENCE_CLIENTE foreign key
(CLIEN_CODIGO)
references CLIENTE (CLIEN_CODIGO)
go
alter table PRODUCTO
add constraint FK_PRODUCTO_REFERENCE_EMPRESA foreign key
(EMP_RUC)
references EMPRESA (EMP_RUC)
go
2. Abrimos el SQLServer 2014

3. Ingresamos nuestros datos de acceso

4. Vamos al lado izquierdo de la pantalla, donde damos clic izquierdo


sobre base de datos y seleccionamos en nueva base de datos.

5. Se abre una nueva ventana, donde damos un nombre a nuestra


nueva base de datos y le damos las propiedades que deseemos, en
este caso hemos llamado a nuestra base de datos bd_complexivo_b,
luego damos clic en aceptar.

6. Vemos que se ha creado nuestra base de datos exitosamente.

7. Ahora vamos a ejecutar el archivo sql con la base que diseamos en


Power Designer. Asi que vamos al men y presionamos en
archivo/abrir/archivo

8. Se nos abre un ventana y seleccionamos el archivo sql que


generamos
en
Power
Designer.
En
este
caso
complexivo_b_SQLSERVER.sql y damos clic en abrir.

9. Se nos abre el archivo sql, con los comandos necesarios para crear
las tablas que necesitamos. En el lado superior izquierdo verificamos
que la base de datos en la que nos encontramos sea la correcta y
luego damos clic en ejecutar.

10.Una vez ejecutado, se nos despliega el siguiente mensaje

11.Ahora verificamos, que las tablas estn en la base de datos.

12.Ahora, como nos dice el ejercicio, vamos a ingresar datos de forma


manual, en producto, para tener nuestra base de datos poblada y
poder probarla posteriormente. Como por ejemplo:
En Empresa, que va a ser una empresa proveedora.

10

13.En producto, que sern los productos que ofrece la empresa LOS
ALPES

14.En la tabla proveedor, pondremos los mismos datos de la tabla


empresa, a que la tabla proveedor es para que en la base de
IMPORTQUITO se tenga un registro de la empresa proveedora.

15.Una vez ya poblada la base para hacer las pruebas, podemos ir a la


aplicacin.

APLICACIN SERVIDOR
En este caso para la empresa LOS ALPES que ser la que tenga los
WebServices, se ha decidido crear una aplicacin en ASP.NET, con c#. Por lo
que procedemos haciendo lo siguiente:
1. Abrimos VisualStudio, en nuestro caso utilizaremos VisualStudio 2015

11

2. Vamos a la barra de men y damos clic en Archivo/Nuevo/Proyecto

3. Se nos abre una nueva ventana en donde seleccionaremos el


Lenguaje C# y elegimos Aplicacin web ASP.NET, en nuestro caso
llamaremos a la aplicacin ServicioRest que pertenecer a la
aplicacin de Los Alpes. Y le damos clic en Aceptar.

12

4. Se nos abrir una nueva ventana, en done nos dar opciones de


plantillas, pero para nuestro caso, seleccionaremos sin Plantilla y
elegiremos el modelo MVC. Presionamos aceptar.

5. Esperamos se nos cree el proyecto.

6. Vemos que se haya creado el proyecto correctamente.

13

7. Ahora, para hacerlo con el Patrn de Diseo MVC, lo que debemos es


ponerle capas a nuestro proyecto, para lo cual haremos lo siguiente:
Damos clic derecho sobre la solucin y elegimos Agregar/Nuevo
Proyecto

8. Se nos abre una nueva ventana, en donde elegiremos, Visual


C#/Windows/Biblioteca de clases. A esta le llamaremos Entidades, ya
que tendr nuestro modelo de la base de datos.

14

9. De la misma manera creamos dos Bibliotecas de Clases ms,


llamadas Datos y Negocio. En donde, la una tendr accesibilidad a los
datos de la base de datos y la otra tendr nuestras reglas de negocio
de la aplicacin. Una vez creados los proyectos, tendremos el rbol de
proyectos as:

10.Ahora haremos las referencias respectivas para cada proyecto. Para


esto, damos clic derecho sobre Datos, y damos clic en
Agregar/Referencia

15

11.Se nos abre una nueva ventana en donde, para el caso de la capa de
datos, le va a hacer referencia a la capa de Entidades, por lo que solo
seleccionamos Entidades y damos clic en Aceptar.

12.En donde hacemos lo mismo para la capa de Negocio y


Vistas(Proyecto ServicioRest), en donde la capa de Negocio va a
hacer referencia a Entidades y Datos, y las capa de Vistas va a hacer
referencia a Negocio y Entidades.
En donde en referencias de cada capa podremos ver las referencias
que tienen entre ellas.

16

13.Ahora dentro de la capa datos, vamos a crear una clase llamada


conexin, en donde instanciaremos nuestra cadena de conexin a la
base de datos

14.El cdigo dentro de la clase ser el siguiente, para este caso, la lnea
de conexin es por la autenticacin de Windows como usuario local.
DalConexion.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Datos
{
public class DalConexion
{
public static String obtenerConexion()
{
return "Server=DESKTOP-1207RI9\\SQLEXPRESS;Initial
Catalog=db_complexivo_b;Trusted_Connection=Yes;";
}
}
}

17

15.Dentro de la capa Entidades, creamos las entidades que tenemos en


la base de datos, en este caso como ser el servidor, solo crearemos
las Entidades Empresa y clase Producto.
Empresa.cs
using
using
using
using
using

System;
System.Collections.Generic;
System.Linq;
System.Text;
System.Threading.Tasks;

namespace Entidades
{
public class Empresa
{
public string ruc { get; set; }
public string nombre { get; set; }
public string direccion { get; set; }
public string telefono { get; set; }
public string correo { get; set; }
}
}

Producto.cs
using
using
using
using
using

System;
System.Collections.Generic;
System.Linq;
System.Text;
System.Threading.Tasks;

namespace Entidades
{
public class Producto
{
public Int32 codigo { get; set; }
public string rucEmpresa { get; set; }
public string nombre { get; set; }
public string descripcion { get; set; }
public double precioUnitario { get; set; }
public int stock { get; set; }
}
}

16.Creamos nuestro acceso a la base de datos para la entidad Producto,


segn las consultas que necesitemos. Crearemos una clase en la capa
Datos para Producto en este caso la llamaremos DalProducto.
DalProducto.cs
using
using
using
using
using
using
using
using

System;
System.Collections.Generic;
System.Data;
System.Data.SqlClient;
System.Linq;
System.Text;
System.Threading.Tasks;
Entidades;

18

namespace Datos
{
public class DalProducto
{
SqlConnection cnn;
SqlDataAdapter cmd2;
SqlCommand cmd;
DataSet ds;
public bool insertarProducto(Producto objetoProducto)
{
String sql = "insert into PRODUCTO (EMP_RUC, PRO_NOMBRE,
PRO_DESCRIPCION, PRO_PRECIO_UNITARIO) values ('" + objetoProducto.rucEmpresa +
"','" + objetoProducto.nombre + "', '" + objetoProducto.descripcion + "', " +
objetoProducto.precioUnitario + ")";
cnn = new SqlConnection(DalConexion.obtenerConexion());
cnn.Open();
cmd = new SqlCommand(sql, cnn);
cmd.ExecuteNonQuery();
return true;
}
public DataSet buscarProductoPorCodigoYRucEmpresa(Int32 codigo, string
rucEmpresa)
{
String sql = "select * from PRODUCTO where PRO_CODIGO=" + codigo + " and
EMP_RUC = '" + rucEmpresa + "'";
cnn = new SqlConnection(DalConexion.obtenerConexion());
cnn.Open();
cmd = new SqlCommand(sql, cnn);
SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
sda.Fill(ds);
cmd.ExecuteNonQuery();
cnn.Close();
return ds;
}
public bool actualizarProducto(Producto objetoProducto)
{
String sql = "update PRODUCTO Set PRO_NOMBRE_='" + objetoProducto.nombre
+ "',PRO_DESCRIPCION='" + objetoProducto.descripcion + "',PRO_PRECIO_UNITARIO="
+ objetoProducto.precioUnitario + ",PRO_STOCK=" + objetoProducto.stock + " where
PRO_CODIGO=" + objetoProducto.codigo + " and EMP_RUC = '" +
objetoProducto.rucEmpresa + "'";
cnn = new SqlConnection(DalConexion.obtenerConexion());
cnn.Open();
cmd = new SqlCommand(sql, cnn);
cmd.ExecuteNonQuery();
return true;
}
public bool eliminarProducto(Int32 codigo, string rucEmpresa)
{
String sql = "delete PRODUCTO where PRO_CODIGO=" + codigo + " and
EMP_RUC = '" + rucEmpresa + "'";
cnn = new SqlConnection(DalConexion.obtenerConexion());
cnn.Open();
cmd = new SqlCommand(sql, cnn);
cmd.ExecuteNonQuery();
return true;

19

}
public DataSet listarProductosConStockMayorACero()
{
String sql = "SELECT * FROM PRODUCTO where PRO_STOCK > 0";
cnn = new SqlConnection(DalConexion.obtenerConexion());
cnn.Open();
cmd = new SqlCommand(sql, cnn);
SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
sda.Fill(ds);
cmd.ExecuteNonQuery();
cnn.Close();
return ds;
}
public List<Producto> listarProductos2()
{
List<Producto> lista = new List<Producto>();
String sql = "SELECT * FROM PRODUCTO";
cnn = new SqlConnection(DalConexion.obtenerConexion());
cnn.Open();
cmd2 = new SqlDataAdapter(sql, cnn);
ds = new DataSet();
cmd2.Fill(ds, "DATOS");

DataTable tabla = ds.Tables[0];


foreach (DataRow row in tabla.Rows)
{
Producto ce = new Producto();
ce.codigo = Convert.ToInt32(row["PRO_CODIGO"]);
ce.rucEmpresa = row["EMP_RUC"].ToString();
ce.nombre = row["PRO_NOMBRE"].ToString();
ce.descripcion = row["PRO_DESCRIPCION"].ToString();
ce.precioUnitario = Convert.ToDouble(row["PRO_PRECIO_UNITARIO"]);
ce.stock = Convert.ToInt32(row["PRO_STOCK"]);
lista.Add(ce);
}
cnn.Close();
return lista;

public Producto buscarProductoLocal(Int32 codigoProducto, string rucEmpresa)


{
Producto p=null;
String sql = "select* from PRODUCTO where PRO_CODIGO = " + codigoProducto
+ " and EMP_RUC = '" + rucEmpresa + "'";
cnn = new SqlConnection(DalConexion.obtenerConexion());
cnn.Open();
cmd2 = new SqlDataAdapter(sql, cnn);
ds = new DataSet();
cmd2.Fill(ds, "DATOS");
DataTable tabla = ds.Tables[0];
foreach (DataRow row in tabla.Rows)
{
p = new Producto();
p.codigo = Convert.ToInt32(row["PRO_CODIGO"]);
p.rucEmpresa = row["EMP_RUC"].ToString();
p.nombre = row["PRO_NOMBRE"].ToString();
p.descripcion = row["PRO_DESCRIPCION"].ToString();
p.precioUnitario = Convert.ToDouble(row["PRO_PRECIO_UNITARIO"]);
p.stock = Convert.ToInt32(row["PRO_STOCK"]);

20

}
cnn.Close();
return p;
}
public DataSet listarProductos()
{
String sql = "select * from PRODUCTO";
cnn = new SqlConnection(DalConexion.obtenerConexion());
cnn.Open();
cmd = new SqlCommand(sql, cnn);
SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
sda.Fill(ds);
cmd.ExecuteNonQuery();
cnn.Close();
return ds;
}
public bool actualizarStockProducto(Producto objetoProducto)
{
String sql = "update PRODUCTO Set PRO_STOCK=" + objetoProducto.stock + "
where PRO_CODIGO=" + objetoProducto.codigo + " and EMP_RUC = '" +
objetoProducto.rucEmpresa + "'";
cnn = new SqlConnection(DalConexion.obtenerConexion());
cnn.Open();
cmd = new SqlCommand(sql, cnn);
cmd.ExecuteNonQuery();
return true;
}
}
}

17.Ahora crearemos una clase llamada AdministracionProducto, en


nuestra capa de negocio, con el siguiente cdigo
AdministracionProducto.cs
using
using
using
using
using
using
using
using

System;
System.Collections.Generic;
System.Data;
System.Linq;
System.Text;
System.Threading.Tasks;
Datos;
Entidades;

namespace Negocio
{
public class AdministracionProducto
{
public DataSet listarProductosConStock()
{
DalProducto dp = new Datos.DalProducto();
return dp.listarProductosConStockMayorACero();
}
public DataSet listarProductos()
{
DalProducto dp = new Datos.DalProducto();

21

return dp.listarProductos();
}
public bool insertarProducto(Producto producto)
{
DalProducto dp = new Datos.DalProducto();
return dp.insertarProducto(producto);
}
public bool actualizarProducto(Producto producto)
{
DalProducto dp = new Datos.DalProducto();
return dp.actualizarProducto(producto);
}
public bool actualizarStockProducto(Int32 codigoProduco, string rucEmpresa, int
cantidadComprada)
{
bool respuesta = false;
DalProducto dp = new Datos.DalProducto();
Producto producto = buscarProductoLocal(codigoProduco, rucEmpresa);
if(producto!=null)
{
producto.stock-=cantidadComprada;
respuesta = dp.actualizarStockProducto(producto);
}
return respuesta;
}
public bool eiminarProducto(Producto producto)
{
DalProducto dp = new Datos.DalProducto();
return dp.eliminarProducto(producto.codigo, producto.rucEmpresa);
}
public List<Producto> listarProductos2()
{
DalProducto dp = new Datos.DalProducto();
return dp.listarProductos2();
}
public DataSet buscarProducto(Int32 codigoProducto, string rucEmpresa)
{
DalProducto dp = new Datos.DalProducto();
return dp.buscarProductoPorCodigoYRucEmpresa(codigoProducto, rucEmpresa);
}

public Producto buscarProductoLocal(Int32 codigoProducto, string rucEmpresa)


{
DalProducto dp = new Datos.DalProducto();
return dp.buscarProductoLocal(codigoProducto, rucEmpresa);
}

18.Ahora vamos a crear una vista para visualizar los productos. Para esto
vamos a crear un controlador. Para lo cual vamos al rbol del
proyecto,
damos
clic
derecho
sobre
la
carpeta
controller/Agregar/contolador

22

19.Se nos abrir una ventana en donde seleccionaremos controlador


vaco.

20.Al dar clic en aceptar, nos pedir que le demos un nombre a nuestro
controlador, en este caso le hemos puesto ProductoController y le
damos agregar.

21.Nos dirigimos a App_Start y le damos clic n RouterConfig

23

22.Cambiamos Home por Producto.

23.Agregamos una
vistas/Producto.

vista

dando

clic

derecho

sobre

la

carpeta

24

24.Le damos un nombre a nuestra vista y damos en aceptar

25.Ahora entramos a ProductoController y ponemos Producto dentro de


los parntesis de View, puesto a que queremos llamar a la vista que
creamos.

25

26.Ahora agregamos una vista parcial llamada listado. En donde la


codificaremos as.
@using Entidades;
@{
List<Producto> listado = ViewBag.listadoProductos as List<Producto>;
}
<table>
<thead>
<tr>
<th>Codigo</th>
<th>Nombre</th>
<th>Descripcion</th>
<th>Precio</th>
<th>Stock</th>
</tr>
</thead>
<tbody>
@foreach (Producto obj in listado)
{
<tr>
<td>@obj.codigo</td>
<td>@obj.nombre</td>
<td>@obj.descripcion</td>
<td>@obj.precioUnitario</td>
<td>@obj.stock</td>
</tr>
}
</tbody>
</table>

27.En nuestro controlador agregamos el siguiente cdigo para cargar la


vista.
using
using
using
using
using
using

System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.Mvc;
Negocio;

namespace LosAlpes.Controllers
{
public class ProductoController : Controller
{
// GET: Producto
public ActionResult Index()
{
AdministracionProducto ap = new AdministracionProducto();
ViewBag.listadoProductos = ap.listarProductos2();
return View("Producto");
}
}
}

26

28.Dentro de la vista Producto agregamos esto, para llamar a nuestra


vista parcial Listado
@{
ViewBag.Title = "Producto";
}
<h2>Productos</h2>
@Html.Partial("Listado")

29. Si mandamos a ejecutar, se nos enlistarn los productos que tenemos

en la base

30.Ahora haremos los web services que devolvern, los mtodos


especificados para obtener los productos y disminuir el stock cuando
un cliente realice un pedido.
Para crear el WebService, damos clic derecho sobre el proyecto
ServicioRest y seleccionamos Agregar/Nuevo Elemento. En donde
escogeremos web/Servicio WCF

27

31.En
el
WebService
aadimos
IWebServiceConsultaREST.cs
using
using
using
using
using
using
using
using

el

siguiente

Cdigo

en

Entidades;
System;
System.Collections.Generic;
System.Data;
System.Linq;
System.Runtime.Serialization;
System.ServiceModel;
System.Text;

namespace ServicioRest
{
// NOTA: puede usar el comando "Rename" del men "Refactorizar" para cambiar el
nombre de interfaz "IWebServiceConsultaREST" en el cdigo y en el archivo de
configuracin a la vez.
[ServiceContract]
public interface IWebServiceConsultaREST
{
[OperationContract]
DataSet obtenerProductosConStock();
}
[DataContract]
public class ProductoService
{
[DataMember]
public Producto producto
{
get { return producto; }
set { producto = value; }
}
}
}

32.En WebServiceConsultaREST.svc.cs respectivamente:


using
using
using
using
using
using
using

Negocio;
System;
System.Collections.Generic;
System.Data;
System.Linq;
System.Runtime.Serialization;
System.ServiceModel;

28

using System.Text;
namespace ServicioRest
{
// NOTA: puede usar el comando "Rename" del men "Refactorizar" para cambiar el
nombre de clase "WebServiceConsultaREST" en el cdigo, en svc y en el archivo de
configuracin a la vez.
// NOTA: para iniciar el Cliente de prueba WCF para probar este servicio, seleccione
WebServiceConsultaREST.svc o WebServiceConsultaREST.svc.cs en el Explorador de
soluciones e inicie la depuracin.
public class WebServiceConsultaREST : IWebServiceConsultaREST
{
public DataSet obtenerProductosConStock()
{
AdministracionProducto admin = new AdministracionProducto();
DataSet ds = admin.listarProductosConStock();
return ds;
}
}
}

Y vemos que funcione correctamente

29

33.Aadimos
otro
Web
Service
WebServicePedidosREST.
Aadimos
IWebServicePedidos REST.cs
using
using
using
using
using
using
using

WCF
al
que
llamamos
el
siguiente
Cdigo
en

Entidades;
System;
System.Collections.Generic;
System.Linq;
System.Runtime.Serialization;
System.ServiceModel;
System.Text;

namespace ServicioRest
{
// NOTA: puede usar el comando "Rename" del men "Refactorizar" para cambiar el
nombre de interfaz "IWebServicePedidosREST" en el cdigo y en el archivo de
configuracin a la vez.
[ServiceContract]
public interface IWebServicePedidosREST
{
[OperationContract]
bool actualizarStockProducto(Int32 codigoProducto, string rucEmpresa, int
cantidadComprada);
}
[DataContract]
public class ProductoService2
{
[DataMember]
public Producto producto
{
get { return producto; }
set { producto = value; }
}
}
}

34.Y en el WebServicePedidosREST.svc.cs respectivamente:


30

using
using
using
using
using
using
using

Negocio;
System;
System.Collections.Generic;
System.Linq;
System.Runtime.Serialization;
System.ServiceModel;
System.Text;

namespace ServicioRest
{
// NOTA: puede usar el comando "Rename" del men "Refactorizar" para cambiar el
nombre de clase "WebServicePedidosREST" en el cdigo, en svc y en el archivo de
configuracin a la vez.
// NOTA: para iniciar el Cliente de prueba WCF para probar este servicio, seleccione
WebServicePedidosREST.svc o WebServicePedidosREST.svc.cs en el Explorador de
soluciones e inicie la depuracin.
public class WebServicePedidosREST : IWebServicePedidosREST
{
public bool actualizarStockProducto(Int32 codigoProducto, string rucEmpresa, int
cantidadComprada)
{
bool respuesta = false;
AdministracionProducto admin = new AdministracionProducto();
respuesta = admin.actualizarStockProducto(codigoProducto, rucEmpresa,
cantidadComprada);
return respuesta;
}
}
}

Ahora verificamos que funcione:

31

APLICACIN CLIENTE
Una vez creado el servidor, crearemos un cliente que consuma los
WebServices propuestos. Para lo cual crearemos un proyecto similar al
anterior llamado Imporquito.
1. Abrimos otra ventana de Visual Studio y creams un nuevo proyecto.

2. Dentro de la solucin creada, aadimos los proyectos de Entidades,


Datos y Negocio y como se los aadi en el proyecto LosAlpes
anteriormente.
32

3. Asimismo ponemos los proyectos con sus respectivas referencias.

4. Aadimos las entidades que tenemos en la base de datos y


corresponden a Imporquito respectivmente, las cuales son: Cliente,
Proveedor Factura y DetalleFactura. Adems crearemos una entidad
llamada Producto que contendr los mismo campos de la tabla
Producto del Proveedor.

5. Agregamos el cdigo para las entidades y quedar de la siguiente


manera.
33

Cliente
using
using
using
using
using

System;
System.Collections.Generic;
System.Linq;
System.Text;
System.Threading.Tasks;

namespace Entidades
{
public class Cliente
{
public Int32 codigo { get; set; }
public string cedula { get; set; }
public string nombre { get; set; }
public string apellido{ get; set; }
public string direccion { get; set; }
}
}

Proveedor
using
using
using
using
using

System;
System.Collections.Generic;
System.Linq;
System.Text;
System.Threading.Tasks;

namespace Entidades
{
public class Proveedor
{
public Int32 codigo { get; set; }
public string nombre { get; set; }
public string direccion { get; set; }
public string telefono { get; set; }
public string ruc { get; set; }
public string correo { get; set; }
}
}

Factura

using
using
using
using
using

System;
System.Collections.Generic;
System.Linq;
System.Text;
System.Threading.Tasks;

namespace Entidades
{
public class Factura
{
public Int32 codigo { get; set; }
public Int32 codigoCliente{ get; set; }
public DateTime fecha { get; set; }
public double iva { get; set; }
public double total { get; set; }
}
}

DetalleFactura

using System;
using System.Collections.Generic;

34

using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Entidades
{
public class DetalleFactura
{
public Int32 codigoFactura { get; set; }
public Int32 codigoProducto { get; set; }
public Int32 codigoProveedor { get; set; }
public string nombre { get; set; }
public double precioUnitario { get; set; }
public int cantidad { get; set; }
public double subtotal { get; set; }
}
}

Producto
using
using
using
using
using

System;
System.Collections.Generic;
System.Linq;
System.Text;
System.Threading.Tasks;

namespace Entidades
{
public class Producto
{
public Int32 codigo { get; set; }
public string rucEmpresa { get; set; }
public string nombre { get; set; }
public string descripcion { get; set; }
public double precioUnitario { get; set; }
public int stock { get; set; }
}
}

6. Creamos las clases de Acceso a datos segn convenga.


7. Ahora aadimos las Referencias de los Web Services para
consumirlos. Para esto damos clic derecho sobre el proyecto
Impoquito y seleccionames Agregar/Referencia de Servicio.

35

8.

Necesitamos la url del web service. Ejecutamos el WebService de


Consulta al igual que el WebService de Consulta de LosAlpes y
copiamos su url. Una vez copiada la url se pega en el campo direccin
de la ventana de la refencia del servicio. Le damos un nombre a la
referencia y damos aceptar.

9. Hacemos lo mismo con el servicio de Pedidos.

36

10.Vemos que en el explorador de soluciones se encuentren las


referencias a los servicios que creamos.

11.Ahora agregamos un nuevo elemento en el proyecto Imporquito.


Elegimos Web/Web Form y lo llamamos Producto.

37

12.Dentro del formulario ponemos el siguiente cdigo.


Productos.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Productos.aspx.cs"
Inherits="Imporquito.Productos" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h1>PEDIDOS IMPORQUITO</h1>
</div>
<br />
<div>
<h2>PRODUCTOS DEL PROVEEDOR ALPES BLANCOS</h2>
</div>
<div>
<asp:GridView ID="tblProductos" runat="server">
</asp:GridView>
</div>
<br />
<div>
<h2>PETICIN DE PEDIDOS</h2>
</div>
<div>
<h3>Datos del Cliente</h3>
</div>
<table>
<tr>
<td>
<asp:Label ID="Label3" runat="server" Text="Cdula:"></asp:Label>
<asp:TextBox ID="txtCedula" runat="server"></asp:TextBox>

38

</td>
<td>
<asp:Label ID="Label4" runat="server" Text="Nombre:"></asp:Label>
<asp:TextBox ID="txtNombre" runat="server"></asp:TextBox>
</td>
</tr>
<tr>
<td>
<asp:Label ID="Label5" runat="server" Text="Apellido:"></asp:Label>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</td>
<td>
<asp:Label ID="Label6" runat="server" Text="Direccin:"></asp:Label>
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
</td>
</tr>
</table>
<br />
<div>
<h4>Pedido</h4>
</div>

<div>
<asp:Label ID="Label1" runat="server" Text="ID-Producto:"></asp:Label>
<asp:TextBox ID="txtProducto" runat="server"></asp:TextBox>
&nbsp;&nbsp;&nbsp;
<asp:Label ID="Label2" runat="server" Text="Cantidad:"></asp:Label>
<asp:TextBox ID="txtCantidad" runat="server"></asp:TextBox>
&nbsp;&nbsp;
<asp:Button ID="btnAgregar" runat="server" OnClick="btnAgregar_Click"
Text="Realizar Pedido" />
</div>
<div>
<asp:Label ID="lblMensaje" runat="server" Text=""></asp:Label>
</div>
</form>
</body>
</html>

Producto.aspx.cs

using
using
using
using
using
using

System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;

39

using
using
using
using

Entidades;
System.Data;
Imporquito.ServicioConsulta;
Imporquito.ServicioPedidos;

namespace Imporquito
{
public partial class Productos : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
llenarTabla();
}
protected void btnAgregar_Click(object sender, EventArgs e)
{
bool respuesta = false;
ServicioPedidosREST.WebServicePedidosRESTClient servicio = new
ServicioPedidosREST.WebServicePedidosRESTClient();
respuesta = servicio.actualizarStockProducto(Convert.ToInt32(txtProducto.Text),
"9999999999999", Convert.ToInt32(txtCantidad.Text));
if (respuesta == true)
{
lblMensaje.Text = "Pedido Realizado";
txtProducto.Text = "";
txtCantidad.Text = "";
llenarTabla();
}
else
{
lblMensaje.Text = "NO se pudo realizar el pedido";
}
}
public void llenarTabla()
{
DataSet ds = new DataSet();
ServicioConsultaREST.WebServiceConsultaRESTClient consultaREST = new
ServicioConsultaREST.WebServiceConsultaRESTClient();
ds = consultaREST.obtenerProductosConStock();
tblProductos.DataSource = ds.Tables[0];
tblProductos.DataBind();
}
public List<Producto> obtenerProductosDeServidor()
{
List<Producto> lista = new List<Producto>();
WebServiceConsultaSoapClient servicioConsulta = new
WebServiceConsultaSoapClient();
DataSet ds = servicioConsulta.ObtenerProductosConStock();
DataTable tabla = ds.Tables[0];
foreach (DataRow row in tabla.Rows)
{
Producto p = new Producto();
p.codigo = Convert.ToInt32(row["PRO_CODIGO"]);
p.rucEmpresa = row["EMP_RUC"].ToString();
p.nombre = row["PRO_NOMBRE"].ToString();
p.descripcion = row["PRO_DESCRIPCION"].ToString();
p.precioUnitario = Convert.ToDouble(row["PRO_PRECIO_UNITARIO"]);

40

p.stock = Convert.ToInt32(row["PRO_STOCK"]);
lista.Add(p);

return lista;
}

PRUEBAS APLICACIN FUNCIONAL


1. Como vamos a consumir los WebServices debemos ejecutar el proyecto
ServicioRest.

41

2. Una vez que el proyecto ServicioRest est en ejecucin, podemos


ejecutar el proyecto Imporquito.

3. Como podemos ver en la tabla no se cargan los productos con stock


cero como podemos notar en la tabla del proyecto LosAlpes, donde se
cargan todos los productos.
Ahora vamos a realizar un pedido con los siguientes datos.

42

4. En donde al realizar el pedido veremos que la tabla se actualizar y


nos devolver un mensaje si el pedido fue exitoso.

5. Como podemos notar la tabla se actualiz cargndola otra vez desde


el web service y el pedido se realiz con xito.
6. Hacemos otra prueba eliminando todos los productos del producto
con cdigo 3, quitando los 100 productos y veremos que la tabla se
actualizar.

43

7. Como vemos la tabla se ha actualizado nuevamente.

8. Verificamos en la base, y vemos que se han hecho los cambios con


xito.
44

45

Das könnte Ihnen auch gefallen