You are on page 1of 30

MANUAL DE SOAP EN .

NET CON
EN LA NUBE

Integrantes: Jenny Oña, Daniela Changoluisa

Servidor de Base de Datos


Para acceder se debe abrir la aplicación de escritorio remoto

Cuando se abre la ventana para la conexión escribimos la IP pública en el


recuadro, esto nos permite saber a qué servidor nos vamos a conectar.

Vemos que se abre una ventana con la conexión al servidor remoto que
contratamos y es a donde vamos a conectar nuestra aplicación.

En este servidor ya está instalada una instancia de base de datos a la cual nos
conectaremos.

Primero debemos ver si nuestra instancia está corriendo en el servidor, para


esto abrimos el SQL Server Configuration Manager
Esto nos permite ver las instancias de SQL Server que están corriendo, en
nuestro caso la instancia se denomina DOTNET y en “state” podemos ver si
está o no corriendo, si estuviera en el estado stopped debemos dar click
derecho sobre la instancia y seleccionar iniciar o start

Posteriormente abrimos la aplicación SQL Server Management Studio para


poder conectarnos a nuestra base de datos, aquí ingresamos con el sa (system
administrator) y su respectiva clave.
1.1 Acceso a la instancia de base de datos desde fuera del Data Center.
Para poder acceder desde fuera del datacenter es necesario tener la siguiente
información:

IP pública (que nos indica a que servidor nos vamos a conectar), el puerto de
conexión (Es el que identifica a que instancia del servidor nos conectamos), el
usuario y clave de la instancia (Son las credenciales de acceso que
configuramos al instalar la instancia de base de datos).

IP Pública: Ésta es la misma dirección IP pública con la que nos conectamos


al escritorio remoto ya que identifica el servidor al que nos vamos a conectar.
En nuestro caso es:208.66.193.64
Puerto de conexión: Es el puerto que identifica la instancia a la que queremos
acceder de nuestro servidor, para esto hacemos lo siguiente:

Abrimos nuevamente el SQL Server Configuration Manager, seleccionamos la


opción de SQL Server Network Configuration (nos permite ver las propiedades
de red de la instancia), al hacer esto se nos muestran los nombres de las
instancias que se encuentran instaladas en el servidor, seleccionamos nuestra
instancia que es DOTNET y posteriormente seleccionamos TCP/IP, damos
click derecho y seleccionamos Properties.
En la ventana que se abre seleccionamos la pestaña IP Address y nos
desplazamos hacia abajo hasta encontrar la opción que dice TCP Dynamic
Ports y éste es nuestro puerto de conexión, en este caso 49162.

En Server name colocamos la IP y el puerto separado por una coma. En Login


ponemos sa y en el Password la clave zaqxswcde
Vemos que ya estamos conectados al servidor del Data Center en la Nube

1.2 Creación de la Base de Datos


Para poder crear la base de datos en nuestra instancia debemos abrir el SQL
Server Management Studio y poner lo siguiente:

-----------------------------------------CREACION BASES DE DATOS

USE master
GO

--C:\BDD2008\_DOTNET\MSSQL10_50.DOTNET\MSSQL\DATA Corresponde al directorio


donde esta instalada la instancia

---------------------CREACION BASES DE DATOS-------------------------

USE master
GO
CREATE DATABASE [VUELOS] ON (NAME = N'VUELOS_Data', FILENAME =
N'C:\BDD2008\_DOTNET\MSSQL10_50.DOTNET\MSSQL\DATA\VUELOS_Data.MDF' , SIZE
= 3, FILEGROWTH = 10%) LOG ON (NAME = N'VUELOS_Log', FILENAME =
N'C:\BDD2008\_DOTNET\MSSQL10_50.DOTNET\MSSQL\DATA\VUELOS_Log.LDF' , SIZE =
1, FILEGROWTH = 10%)
COLLATE Traditional_Spanish_CI_AS
GO
1.3 Sobre la base de datos VUELOS damos click derecho y ponemos
New Query donde crearemos las tablas necesarias para el proyecto
como a continuación se describe:

1.4 Para la creación de la tabla Aeropuertos debemos ejecutar lo


siguiente:
USE VUELOS
GO

DROP TABLE VU_AEROPUERTOS


GO

CREATE TABLE VU_AEROPUERTOS


(
AE_ID INT IDENTITY PRIMARY KEY,
AE_CODIGO VARCHAR(3) NULL,
AE_AEROPUERTO VARCHAR(100),
AE_CIUDAD VARCHAR(100)
)

GO
--CREACION DE CONTRAINT EN LA TABLA VU_AEROPUERTOS QUE INDICA QUE EL
CODIGO SEA UNICO
ALTER TABLE VU_AEROPUERTOS ADD CONSTRAINT UK_CODIGO
UNIQUE(AE_CODIGO)
GO

---------------------DATOS DE EJEMPLO--------------------

INSERT INTO VU_AEROPUERTOS(AE_CODIGO, AE_AEROPUERTO, AE_CIUDAD)


VALUES('IBR','Aeropuerto Atahualpa','Ibarra, provincia de Imbabura')

INSERT INTO VU_AEROPUERTOS(AE_CODIGO, AE_AEROPUERTO, AE_CIUDAD)


VALUES('LOH','Aeropuerto Camilo Ponce Enríquez','Catamayo, provincia de Loja')

INSERT INTO VU_AEROPUERTOS(AE_CODIGO, AE_AEROPUERTO, AE_CIUDAD)


VALUES('ATF','Aeropuerto Chachoan','Ambato, provincia de Tungurahua')

INSERT INTO VU_AEROPUERTOS(AE_CODIGO, AE_AEROPUERTO, AE_CIUDAD)


VALUES('SNC','Aeropuerto Cosme Renella','Salinas, Provincia de Santa Elena')

INSERT INTO VU_AEROPUERTOS(AE_CODIGO, AE_AEROPUERTO, AE_CIUDAD)


VALUES('GLZ','Aeropuerto de Gualaquiza','Gualaquiza, provincia de Morona Santiago')

INSERT INTO VU_AEROPUERTOS(AE_CODIGO, AE_AEROPUERTO, AE_CIUDAD)


VALUES('JIP','Aeropuerto de Jipijapa','Jipijapa, provincia de Manabí')

INSERT INTO VU_AEROPUERTOS(AE_CODIGO, AE_AEROPUERTO, AE_CIUDAD)


VALUES('XMS','Aeropuerto de Macas','Macas, Provincia de Morona Santiago')

INSERT INTO VU_AEROPUERTOS(AE_CODIGO, AE_AEROPUERTO, AE_CIUDAD)


VALUES('LGQ','Aeropuerto de Nueva Loja','Nueva Loja, provincia de Sucumbíos')

INSERT INTO VU_AEROPUERTOS(AE_CODIGO, AE_AEROPUERTO, AE_CIUDAD)


VALUES('PYO','Aeropuerto de Putumayo','Puerto El Carmen, provincia de Sucumbíos')

INSERT INTO VU_AEROPUERTOS(AE_CODIGO, AE_AEROPUERTO, AE_CIUDAD)


VALUES('SCY','Aeropuerto de San Cristóbal','Puerto Baquerizo Moreno, Isla San Cristóbal,
provincia de Galápagos')

INSERT INTO VU_AEROPUERTOS(AE_CODIGO, AE_AEROPUERTO, AE_CIUDAD)


VALUES('WSE','Aeropuerto de Santa Cecilia','Nueva Loja, provincia de Sucumbíos')

INSERT INTO VU_AEROPUERTOS(AE_CODIGO, AE_AEROPUERTO, AE_CIUDAD)


VALUES('SUQ','Aeropuerto de Sucúa','Sucúa, provincia de Morona Santiago')

INSERT INTO VU_AEROPUERTOS(AE_CODIGO, AE_AEROPUERTO, AE_CIUDAD)


VALUES('OCC','Aeropuerto Francisco de Orellana','Francisco de Orellana, provincia de
Orellana')

INSERT INTO VU_AEROPUERTOS(AE_CODIGO, AE_AEROPUERTO, AE_CIUDAD)


VALUES('MCH','Aeropuerto General Manuel Serrano','Machala, provincia de El Oro')

INSERT INTO VU_AEROPUERTOS(AE_CODIGO, AE_AEROPUERTO, AE_CIUDAD)


VALUES('ESM','Aeropuerto General Rivadeneira','Esmeraldas, provincia de Esmeraldas')

INSERT INTO VU_AEROPUERTOS(AE_CODIGO, AE_AEROPUERTO, AE_CIUDAD)


VALUES('LTX','Aeropuerto Internacional Cotopaxi','Latacunga, provincia de Cotopaxi')

INSERT INTO VU_AEROPUERTOS(AE_CODIGO, AE_AEROPUERTO, AE_CIUDAD)


VALUES('MEC','Aeropuerto Internacional Eloy Alfaro','Manta, provincia de Manabí')
INSERT INTO VU_AEROPUERTOS(AE_CODIGO, AE_AEROPUERTO, AE_CIUDAD)
VALUES('GYE','Aeropuerto Internacional José Joaquín de Olmedo','Guayaquil, provincia del
Guayas')

INSERT INTO VU_AEROPUERTOS(AE_CODIGO, AE_AEROPUERTO, AE_CIUDAD)


VALUES('UIO','Aeropuerto Internacional Mariscal Sucre','Quito, Provincia de Pichincha')

INSERT INTO VU_AEROPUERTOS(AE_CODIGO, AE_AEROPUERTO, AE_CIUDAD)


VALUES('MRR','Aeropuerto José María Velasco Ibarra','Macará, provincia de Loja')

INSERT INTO VU_AEROPUERTOS(AE_CODIGO, AE_AEROPUERTO, AE_CIUDAD)


VALUES('BHA','Aeropuerto Los Perales','Bahía de Caráquez, provincia de Manabí')

INSERT INTO VU_AEROPUERTOS(AE_CODIGO, AE_AEROPUERTO, AE_CIUDAD)


VALUES('CUE','Aeropuerto Mariscal Lamar','Cuenca, provincia del Azuay')

INSERT INTO VU_AEROPUERTOS(AE_CODIGO, AE_AEROPUERTO, AE_CIUDAD)


VALUES('ETR','Aeropuerto Regional de Santa Rosa','Santa Rosa, provincia de El Oro')

INSERT INTO VU_AEROPUERTOS(AE_CODIGO, AE_AEROPUERTO, AE_CIUDAD)


VALUES('PTZ','Aeropuerto Río Amazonas','Mera, provincia de Pastaza')

INSERT INTO VU_AEROPUERTOS(AE_CODIGO, AE_AEROPUERTO, AE_CIUDAD)


VALUES('GPS','Aeropuerto Seymour','Puerto Ayora, Isla Baltra, provincia de Galápagos')

INSERT INTO VU_AEROPUERTOS(AE_CODIGO, AE_AEROPUERTO, AE_CIUDAD)


VALUES('TSC','Aeropuerto Taisha','Taisha, provincia de Morona Santiago')

INSERT INTO VU_AEROPUERTOS(AE_CODIGO, AE_AEROPUERTO, AE_CIUDAD)


VALUES('TPC','Aeropuerto Tarapoa','Tarapoa, provincia de Sucumbíos')

INSERT INTO VU_AEROPUERTOS(AE_CODIGO, AE_AEROPUERTO, AE_CIUDAD)


VALUES('TUA','Aeropuerto Teniente Coronel Luis A. Mantilla','Tulcán, provincia del Carchi')

INSERT INTO VU_AEROPUERTOS(AE_CODIGO, AE_AEROPUERTO, AE_CIUDAD)


VALUES('TPN','Aeropuerto Tiputini','Nuevo Rocafuerte, provincia de Orellana')

1.5 Para la creación de la tabla Vuelos debemos ejecutar lo siguiente:


USE VUELOS
GO
DROP TABLE VU_VUELOS
GO
CREATE TABLE VU_VUELOS(
[ID_VUELO] [int] IDENTITY(1,1) NOT NULL,
[CIUDAD_ORIGEN] [varchar](3) NULL,
[CIUDAD_DESTINO] [varchar](3) NULL,
[CAPACIDAD] INT NULL,
[VALOR] [MONEY] NULL,
[FECHA_SALIDA] [datetime] NULL
) ON [PRIMARY]

GO
--CREADION DE LOS FOREIGN KEY DE LA TABLA VUELOS CON LA TABLA
AEROPUERTOS

ALTER TABLE VU_VUELOS ADD CONSTRAINT


VU_VUELOS_VU_AEROPUERTOS_ORIGEN FOREIGN KEY (CIUDAD_ORIGEN)
REFERENCES VU_AEROPUERTOS(AE_CODIGO)

ALTER TABLE VU_VUELOS ADD CONSTRAINT


VU_VUELOS_VU_AEROPUERTOS_DESTINO FOREIGN KEY (CIUDAD_DESTINO)
REFERENCES VU_AEROPUERTOS(AE_CODIGO)

SET ANSI_PADDING OFF


GO

1.6 Creamos una vista que nos permita mostrar al usuario la lista de
vuelos con sus correspondientes nombres ejecutando lo siguiente:
USE VUELOS
GO

DROP VIEW WV_LISTA_VUELOS


GO

CREATE VIEW WV_LISTA_VUELOS


AS

SELECT
ID_VUELO,
CIUDAD_O = (SELECT AE_AEROPUERTO FROM VU_AEROPUERTOS WHERE
AE_CODIGO = CIUDAD_ORIGEN ),
CIUDAD_D = (SELECT AE_AEROPUERTO FROM VU_AEROPUERTOS WHERE
AE_CODIGO = CIUDAD_DESTINO ),
CAPACIDAD,
VALOR,
FECHA_SALIDA,
CIUDAD_ORIGEN,
CIUDAD_DESTINO
FROM VU_VUELOS

1.7 Creamos una tabla en donde guardaremos la información de los


Vuelos que ha comprado el cliente:
USE [VUELOS]
GO

CREATE TABLE [dbo].[VU_CLIENTE](


[ID_VUELO] [int] NULL,
[NOMBRES_CLIENTE] [varchar](50) NULL,
[APELLIDOS_CLIENTE] [varchar](50) NULL,
[VALOR] [numeric](7, 2) NULL
) ON [PRIMARY]

GO
1.8 Podemos comprobar la correcta creación de los objetos en la base
de datos, con esto queda listo el ambiente para trabajar
CREACION DE LA APLICACIÓN

2.1 Creación de una solución en blanco con el Framework 3.5

2.2 Para la creación del SERVIDOR damos click derecho en la solución y


agregamos un nuevo proyecto que sea Aplicación de servicio Web
de ASP.NET
2.3 Agregamos un nuevo proyecto de Biblioteca de clases que
corresponde a la Lógica de Negocios
2.4 Agregamos un nuevo proyecto de Biblioteca de clases que
corresponde a las Entidades
2.5 Agregamos un nuevo proyecto de Biblioteca de clases que
corresponde al Acceso a Datos

2.6 Para que se pueda interactuar entre los proyectos que acabamos de
crear debemos crear referencias entre ellos, es decir, permitir que
sean visibles unos proyectos a otros, de la siguiente manera:
En Lógica de Negocios debemos hacer referencia a Entidades y Acceso a
datos
En Entidades debemos agregar la referencia a AccesoDatos
2.7 A continuación colocaremos las Clases y su respectivo código en
cada uno de los proyectos:

2.7.1 En el proyecto de AccesoDatos damos click derecho y ponemos


Agregar/clase y agregamos la clase con el nombre de Conexión.cs

2.7.2 En el proyecto de Entidades damos click derecho y ponemos


Agregar/clase y agregamos las clases con los nombres de:
Aeropuerto.cs, Cliente.cs y Vuelo.cs
2.7.3 En el proyecto de LogicaNegocios damos click derecho y ponemos
Agregar/clase y agregamos las clases con los nombres de:
AdministrarVuelo.cs

2.8 Después de haber creado las clases correspondientes vamos a


implementar el respectivo código en cada una de ellas con lo
siguiente:

2.8.1 En la clase Conexion.cs colocamos lo siguiente:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Data;
using System.Data.SqlClient;

namespace AccesoDatos
{
public class Conexion
{
public SqlConnection Conectar()
{
// Data Source=208.66.193.64,49162 --> Es la instancia de base de datos que se va a utilizar
dada por la IP Pública y su puerto
// User ID=sa; Es el usuario con el que voy a conectarme a la base de datos
//Password=zaqxswcde --> Es la clave correspondiente a la base de datos
//VUELOS --> Es la base de datos a la que se va a conectar la aplicación

String micadena = "Data Source=208.66.193.64,49162;Initial Catalog=VUELOS;User


ID=sa;Password=zaqxswcde";
return new SqlConnection(micadena);
}
}
}

2.8.2 En la clase Aeropuerto.cs del proyecto Entidades colocamos:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Entidades
{
//Clase que define la entidad Aeropuerto
public class Aeropuerto
{
private int IdAeropuerto = 0;

public int idAeropuerto


{
get { return IdAeropuerto; }
set { IdAeropuerto = value; }
}

private string Codigo = string.Empty;

public string codigo


{
get { return Codigo; }
set { Codigo = value; }
}

private string AeropuertoNombre = string.Empty;

public string aeropuertoNombre


{
get { return AeropuertoNombre; }
set { AeropuertoNombre = value; }
}

private string Ciudad = string.Empty;

public string ciudad


{
get { return Ciudad; }
set { Ciudad = value; }
}
}
}

2.8.3 En la clase Cliente.cs del proyecto Entidades colocamos:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Entidades
{
//Clase que define la entidad Cliente
public class Cliente
{
private string Nombres = string.Empty;

public string nombres


{
get { return Nombres; }
set { Nombres = value; }
}

private string Apellidos = string.Empty;

public string apellidos


{
get { return Apellidos; }
set { Apellidos = value; }
}
}
}

2.8.4 En la clase Vuelo.cs del proyecto Entidades colocamos:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Entidades
{
//Clase que define la entidad Vuelo
public class Vuelo
{
private int IdVuelo = 0;

public int idVuelo


{
get { return IdVuelo; }
set { IdVuelo = value; }
}

private string CiudadOrigen = string.Empty;

public string ciudadOrigen


{
get { return CiudadOrigen; }
set { CiudadOrigen = value; }
}

private string CiudadDestino = string.Empty;


public string ciudadDestino
{
get { return CiudadDestino; }
set { CiudadDestino = value; }
}

private decimal Valor = decimal.Zero;

public decimal valor


{
get { return Valor; }
set { Valor = value; }
}
private DateTime Fecha = DateTime.Now;

public DateTime fecha


{
get { return Fecha; }
set { Fecha = value; }
}
}
}

2.8.5 En la clase AdministrarVuelos.cs del proyecto LogicaNegocios


colocamos:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using AccesoDatos;
using Entidades;

using System.Data;
using System.Data.SqlClient;

namespace LogicaNegocios
{
public class AdministrarVuelos
{
public Aeropuerto[] aeropuertosNombres;
Conexion objConectarse;

//Creación de objetos que nos permiten manejar la conexión a la base de datos(cnn)


//objeto para manejar los datos de consulta de la base (DataTable tabla)
SqlConnection cnn;
private DataTable tabla;
static public int i = 0;

//Constructor que consulta la lista de vuelos


public AdministrarVuelos()
{
objConectarse = new Conexion();
aeropuertosNombres = ListarAeropuertos();
}

//Método que permite buscar los vuelos según su origen, destino y fecha
public Vuelo[] BuscarVuelos(string cOrigen, string cDestino, string fecha)
{

Vuelo[] vuelos;

//SI no hay ciudad de origen o destino los inicializa con '%' para que busque todos en la
base de datos
if ((cOrigen == null) || (cOrigen == string.Empty))
{
cOrigen = "%";
}
if ((cDestino == null) || (cDestino == string.Empty))
{
cDestino = "%";
}
cnn = objConectarse.Conectar();
cnn.Open();

try
{
//Conexión a la base y consulta de información
SqlCommand cmd = new SqlCommand("Select * from WV_LISTA_VUELOS Where
CIUDAD_ORIGEN LIKE @cOrigen AND CIUDAD_DESTINO LIKE @cDestino ORDER BY VALOR
DESC", cnn);
cmd.Parameters.AddWithValue("@cOrigen", cOrigen);
cmd.Parameters.AddWithValue("@cDestino", cDestino);
SqlDataAdapter sda = new SqlDataAdapter();
sda.SelectCommand = cmd;
tabla = null;
tabla = new DataTable();
sda.Fill(tabla);
cnn.Close();

//Si no existe información retorna null


if (tabla.Rows.Count <= 0)
{
return null;
}
//Si existe información instancia un array de vuelos dependiendo de la cantidad de datos
que
//devolvió la consulta y va creando objeto por objeto
else {
int i = 0;
vuelos = new Vuelo[tabla.Rows.Count];
while (i < tabla.Rows.Count)
{
vuelos[i] = new Vuelo();
vuelos[i].idVuelo = Convert.ToInt16(tabla.Rows[i]["ID_VUELO"]);
vuelos[i].ciudadOrigen = tabla.Rows[i]["CIUDAD_O"].ToString();
vuelos[i].ciudadDestino = tabla.Rows[i]["CIUDAD_D"].ToString();
vuelos[i].valor = Convert.ToDecimal( tabla.Rows[i]["VALOR"]);
vuelos[i].fecha = Convert.ToDateTime(tabla.Rows[i]["FECHA_SALIDA"]);
i+=1;
}
}

}
catch (SqlException ex)
{
return null;
}
return vuelos;
}

public Aeropuerto[] ListarAeropuertos()


{
Aeropuerto[] aeropuertos;

cnn = objConectarse.Conectar();
cnn.Open();

try
{
SqlCommand cmd = new SqlCommand("Select * from VU_AEROPUERTOS", cnn);
Console.Write(cmd);
SqlDataAdapter sda = new SqlDataAdapter();
sda.SelectCommand = cmd;
tabla = null;
tabla = new DataTable();
sda.Fill(tabla);
cnn.Close();
if (tabla.Rows.Count <= 0)
{
return null;
}
else
{
int i = 0;
aeropuertos = new Aeropuerto[tabla.Rows.Count];
while (i < tabla.Rows.Count)
{
aeropuertos[i] = new Aeropuerto();
aeropuertos[i].idAeropuerto = Convert.ToInt16(tabla.Rows[i]["AE_ID"]);
aeropuertos[i].codigo = tabla.Rows[i]["AE_CODIGO"].ToString();
aeropuertos[i].aeropuertoNombre = tabla.Rows[i]["AE_AEROPUERTO"].ToString();
aeropuertos[i].ciudad = tabla.Rows[i]["AE_CIUDAD"].ToString();
i += 1;
}
}

}
catch (SqlException ex)
{
return null;
}
return aeropuertos;
}

public int ComprarVuelo(int idVuelo, string nombres, string apellidos, Decimal valor) {
int result = 0;

SqlConnection con = new SqlConnection("Data Source=(local);Initial


Catalog=VUELOS;Integrated Security=True");
con.Open();
SqlCommand cmd = new SqlCommand("Insert into
VU_CLIENTE(ID_VUELO,NOMBRES_CLIENTE,APELLIDOS_CLIENTE, VALOR)
values(@idVuelo,@nombres,@apellidos, @valor)", con);
cmd.Parameters.AddWithValue("@idVuelo", idVuelo);
cmd.Parameters.AddWithValue("@nombres", nombres);
cmd.Parameters.AddWithValue("@apellidos", apellidos);
cmd.Parameters.AddWithValue("@valor", valor);
result = cmd.ExecuteNonQuery();
con.Close();
if (result == 1)
{
return result;
}
else
{
return -1;
}

//Permite obtener los nombres de cada aeropuerto a partir de su código


public string nombreAeropuertoXCod(string cod) {
string nombre = string.Empty;
for (int i = 0; i < aeropuertosNombres.Length; i++) {
if (aeropuertosNombres[i].codigo == cod) {
nombre = aeropuertosNombres[i].aeropuertoNombre;
i = aeropuertosNombres.Length;
}
}

if (nombre == string.Empty)
nombre = "No definido";

return nombre;
}

}
}

2.8.6 En Service1.asmx del proyecto ServidorVuelos ponemos:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using LogicaNegocios;
using Entidades;

namespace ServidorVuelos
{
/// <summary>

/// </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 Service1 : System.Web.Services.WebService
{
//Los WebMethod son aquellos servicios que están disponibles para ser consumidos

//WebMethod que permite listar los vuelos


[WebMethod]
public Aeropuerto[] listarAeropuertos()
{
Aeropuerto[] aeropuertosAux;
LogicaNegocios.AdministrarVuelos logica = new LogicaNegocios.AdministrarVuelos();
aeropuertosAux = logica.aeropuertosNombres;
return aeropuertosAux;
}

//WebMethod que permite buscar los vuelos


[WebMethod]
public Vuelo[] buscarVuelos(string cOrigen, string cDestino, string fecha)
{
Vuelo[] vuelosAux;
LogicaNegocios.AdministrarVuelos logica = new
LogicaNegocios.AdministrarVuelos();
vuelosAux = logica.BuscarVuelos(cOrigen, cDestino, fecha);
return vuelosAux;
}

//WebMethod que permite comprar los vuelos


[WebMethod]
public int comprarVuelos(int idVuelo, string nombres, string apellidos, Decimal valor)
{
int resp = 0;
LogicaNegocios.AdministrarVuelos logica = new LogicaNegocios.AdministrarVuelos();
resp = logica.ComprarVuelo(idVuelo, nombres, apellidos, valor);
return resp;
}
}
}

2.9 Para la creación del cliente generaremos una nueva aplicación para
lo que empezaremos la creación de una solución en blanco con el
Framework 3.5, damos click derecho en la solución y agregar un
nuevo proyecto de Aplicación de Windows Forms.

2.10 Vamos a trabajar con el cliente que consume el servicio web que
implementamos, para esto primero damos click derecho en
Cliente_Vuelos_Burbano y ponemos Agregar/Windows Forms con el
nombre Venta_Vuelos.cs
2.10.1 Para poder trabajar con el ServicioWeb que implementamos debemos
crear una referencia web del cliente hacia el servidor, damos click
derecho sobre el cliente y ponemos Agregar Referencia de Servicio,
ponemos el nombre Operaciones, debemos ejecutar primero el servidor la
cual nos muestra la dirección y el puerto donde se ejecuta
2.10.2 Creamos el diseño en el form de Venta_Vuelos.cs como se muestra a
continuación:

2.10.3 En la programación del Window Form Venta_Vuelos.cs agregamos lo


siguiente:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Cliente_Vuelos_Burbano
{
//Programación del WIndow Form que hace llamadas a los servicios web
public partial class Venta_Vuelos : Form
{
Operaciones.Aeropuerto[] aeropuertos;

public Venta_Vuelos()
{
InitializeComponent();
iniciarAeropuertos();
}

public void inicio() {


Operaciones.Service1SoapClient servicio = new Operaciones.Service1SoapClient();

public void iniciarAeropuertos() {

//Creamos la instancia del Servicio Web que nombramos Operaciones


//y lo llamamos servicio, esto para poder utilizar las funciones de web methods
Operaciones.Service1SoapClient servicio = new Operaciones.Service1SoapClient();

aeropuertos = servicio.listarAeropuertos();

for (int i = 0; i < aeropuertos.Length; i++)


{
cbx_origen.Items.Add(aeropuertos[i].aeropuertoNombre);
cbx_destino.Items.Add(aeropuertos[i].aeropuertoNombre);
}

public string codAeropuertoXNom(string nombre)


{
string cod = string.Empty;
for (int i = 0; i < aeropuertos.Length; i++)
{
if (aeropuertos[i].aeropuertoNombre == nombre)
{
cod = aeropuertos[i].codigo;
i = aeropuertos.Length;
}
}

if (cod == string.Empty)
cod = "NA";

return cod;
}

private void btt_Buscar_Click(object sender, EventArgs e)


{
Operaciones.Service1SoapClient servicio = new Operaciones.Service1SoapClient();
Operaciones.Vuelo[] vuelos;
string origen = string.Empty;
string destino = string.Empty;

origen = cbx_origen.SelectedItem.ToString();
destino = cbx_destino.SelectedItem.ToString();
vuelos = servicio.buscarVuelos(codAeropuertoXNom(origen), codAeropuertoXNom(destino),
"");

if (vuelos == null)
{
MessageBox.Show("No existen Vuelos para esta información");
}
else {
DataSet ds = new DataSet();
dataGridView1.DataSource = vuelos;
dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
}

private void bttComprar_Click(object sender, EventArgs e)


{
int codVuelo, respCompra = 0;
int cantidadBoletos;
String nombresCliente, apellidosCliente;
Decimal valorUnitario, valorTotal;
int ar = dataGridView1.CurrentRow.Index;

if (ar < 0)
{
MessageBox.Show("Seleccione un vuelo");
return;
}

Operaciones.Service1SoapClient servicio = new Operaciones.Service1SoapClient();

cantidadBoletos = esNumeroPositivo(txtCantBol.Text);

if(cantidadBoletos==-1)
{
MessageBox.Show("Cantidad de Boletos no es correcto");
return;
}

codVuelo = Convert.ToInt16(dataGridView1.Rows[ar].Cells[0].Value);
valorUnitario = Convert.ToDecimal(dataGridView1.Rows[ar].Cells[3].Value);
nombresCliente = txtNombresCl.Text;
apellidosCliente = txtApellidosCl.Text;
valorTotal = valorUnitario*cantidadBoletos;

respCompra = servicio.comprarVuelos(codVuelo, nombresCliente, apellidosCliente,


valorTotal);

if (respCompra == 1)
{
MessageBox.Show("Transacción realizada correctamente");
}
else
{
MessageBox.Show("Error, Transacción no se realizó");
}
}

public int esNumeroPositivo(String numero) {


int resp;
try
{
resp = Convert.ToInt16(numero);
if (resp <= 0)
resp = -1;
}
catch(Exception e)
{
resp = -1;
}

return resp;
}

}
}

2.11 Tenemos la aplicación en funcionamiento

You might also like