Saltar al contenido
Menú
El blog de Kañaz
  • Inicio
  • Acerca de
  • Github
  • Youtube
  • LinkedIn
  • Twitter
El blog de Kañaz

Implementar un servicio web ASP dentro de mi aplicación Silverlight (parte 2)

Publicada el 16 enero, 201116 julio, 2012
Twittear

Este es el segundo post de cinco para establecer el uso de varias tecnologías para la implementación de información geográfica asociada a datos. Si quieres ver el primero puedes ir a la entrada de Usar bing maps en Silverlight o puedes comenzar desde aquí descargando hasta aquí .

Descargar código.

Bien antes de comenzar aquí nos iremos a SQL, necesitas crear una tabla de la siguiente manera

Como verás, tengo la tabla Lugares, de la base de datos Lugares (si, ya se, no tengo mucha imaginación, perdón!!), en donde guardaré los registros de cada uno de los elementos que ya tengo en mi interfaz, para eso bríncate a Visual Studio y desde ahí seguirás.

Da click derecho sobre la carpeta de Site de tu proyecto y selecciona “Agregar” y “Nuevo elemento”.

En la ventana auxiliar selecciona la opción de Web Service, en este caso lo llamé Servicio Datos

Hago un pequeño paréntesis para aclarar que este tipo de servicio web es una forma que los desarrolladores de ASP encontrarán muy familiar, además de que su uso es muy extendido dada su antigüedad, pero ahora han sido reemplazados por los maravillosos servicios WCF, esos los verás mas adelante, pero la idea es que seas capaz de usar ambos.

Bien después del breviario, continua con el servicio web, en donde quedará de la siguiente manera

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Data.SqlClient;
 
[WebService(Namespace = "<a href="http://tempuri.org/")]">http://tempuri.org/")]</a>
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class ServicioDatos : System.Web.Services.WebService {
 
public ServicioDatos ()
{
}
 
[WebMethod]
public int InsertarNuevoLugar(string NOMBRE, string DESCRIPCION, byte[] IMAGEN, string TELEFONO, double LATITUD, double LONGITUD)
{
string cadenaActualizar = "INSERT INTO Lugares (NOMBRE, DESCRIPCION, IMAGEN, TELEFONO, LATITUD, LONGITUD) VALUES " +
"(@nombre, @descripcion, @imagen, @telefono, @latitud, @longitud)";
int t = 0;
using (SqlConnection conexion = new SqlConnection("Data Source=EQUIPOAMIN;Initial Catalog=Lugares;Integrated Security=True;"))
{
SqlCommand comando = new SqlCommand(cadenaActualizar, conexion);
conexion.Open();
comando.Parameters.AddWithValue("@nombre", NOMBRE);
comando.Parameters.AddWithValue("@descripcion", DESCRIPCION);
comando.Parameters.AddWithValue("@imagen", IMAGEN);
comando.Parameters.AddWithValue("@telefono", TELEFONO);
comando.Parameters.AddWithValue("@latitud", LATITUD);
comando.Parameters.AddWithValue("@longitud", LONGITUD);
t = comando.ExecuteNonQuery();
conexion.Close();
}
return t;
}
 
}

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Services; using System.Data.SqlClient; [WebService(Namespace = "<a href="http://tempuri.org/")]">http://tempuri.org/")]</a> [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] public class ServicioDatos : System.Web.Services.WebService { public ServicioDatos () { } [WebMethod] public int InsertarNuevoLugar(string NOMBRE, string DESCRIPCION, byte[] IMAGEN, string TELEFONO, double LATITUD, double LONGITUD) { string cadenaActualizar = "INSERT INTO Lugares (NOMBRE, DESCRIPCION, IMAGEN, TELEFONO, LATITUD, LONGITUD) VALUES " + "(@nombre, @descripcion, @imagen, @telefono, @latitud, @longitud)"; int t = 0; using (SqlConnection conexion = new SqlConnection("Data Source=EQUIPOAMIN;Initial Catalog=Lugares;Integrated Security=True;")) { SqlCommand comando = new SqlCommand(cadenaActualizar, conexion); conexion.Open(); comando.Parameters.AddWithValue("@nombre", NOMBRE); comando.Parameters.AddWithValue("@descripcion", DESCRIPCION); comando.Parameters.AddWithValue("@imagen", IMAGEN); comando.Parameters.AddWithValue("@telefono", TELEFONO); comando.Parameters.AddWithValue("@latitud", LATITUD); comando.Parameters.AddWithValue("@longitud", LONGITUD); t = comando.ExecuteNonQuery(); conexion.Close(); } return t; } }

Como puedes ver esto es sencillo, simplemente escribir una función, anteponiendo [WebMethod] para especificar que se trata de un método accesible, igualmente importante es el que el método sea público, también te comento que debes siempre regresar un valor en este tipo de elementos, en este caso la confirmación de que la operación fue realizada por medio de un comando, dentro del método, usamos sentencias base de SQL para poder insertar la información que estamos recibiendo por medio de los parámetros del método, al terminar ejecutamos el proyecto y tendremos una vista así.

Como puedes ver señalé en la imagen la dirección, dado que necesitamos usarla, copia esa dirección y después regresa a Visual Studio, en tu proyecto de desarrollo da click derecho sobre el y escoge la opción de “Agregar referencia de servicio”.

Es en la siguiente ventana en donde deberás copiar la URL que te mencioné en el paso anterior y además ponerle un nombre de referencia, yo lo dejé como Servicio1.

Ya solo hace falta que te vayas al evento click del botón de actualizar de tu interfaz, y escribas el siguiente fragmento de código.

private void btnGuardar_Click(object sender, RoutedEventArgs e)
{
Servicio1.ServicioDatosSoapClient miServicio = new Servicio1.ServicioDatosSoapClient();
miServicio.InsertarNuevoLugarCompleted += (s, a) =>
{
if (a.Error == null)
MessageBox.Show("Tu información ha sido actualizada");
else
MessageBox.Show("Hubo un problema al subir tu información");
};
miServicio.InsertarNuevoLugarAsync(txtNombre.Text, txtDescripcion.Text, arreglo, Convert.ToInt16(txtTelefono.Text),
Math.Round(Convert.ToDouble(txtLatitud.Text), 5), Math.Round(Convert.ToDouble(txtLongitud.Text), 5));
}

private void btnGuardar_Click(object sender, RoutedEventArgs e) { Servicio1.ServicioDatosSoapClient miServicio = new Servicio1.ServicioDatosSoapClient(); miServicio.InsertarNuevoLugarCompleted += (s, a) => { if (a.Error == null) MessageBox.Show("Tu información ha sido actualizada"); else MessageBox.Show("Hubo un problema al subir tu información"); }; miServicio.InsertarNuevoLugarAsync(txtNombre.Text, txtDescripcion.Text, arreglo, Convert.ToInt16(txtTelefono.Text), Math.Round(Convert.ToDouble(txtLatitud.Text), 5), Math.Round(Convert.ToDouble(txtLongitud.Text), 5)); }

Bien, entonces creas una instancia del cliente SOAP de tu servicio web y por medio de ese objeto mandarás llamar al método web que creaste hace unos pasos así como pasarle los parámetros necesarios, al completar la operación si no hay ningún error simplemente mandas un mensaje de texto diciendo que todo está en orden.

Parte 1: Usar bing maps en Silverlight Parte 3: Publicar mi aplicación web

4 comentarios en «Implementar un servicio web ASP dentro de mi aplicación Silverlight (parte 2)»

  1. Pingback: La Liga Silverlight » Segunda entrada un pequeño SIG (Servicios web ASP)
  2. Pingback: Publicar mi aplicación web (Parte 3) « Mi sitio, tu sitio
  3. Pingback: Un pequeño Sistema de Información Geográfica « Mi sitio, tu sitio
  4. Pingback: Ver mi mapa y datos usando Windows Phone 7 (Parte 5) « Mi sitio, tu sitio

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Busca en este sitio

MI perfil de Github

Github profile

Sígueme en Twitter

Seguir a @aminespinoza
©2023 El blog de Kañaz | Funciona con SuperbThemes y WordPress