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í .
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; } } |
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)); } |
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)»