En la primer entrada de esta mini serie de artículos relacionados vimos la introducción de la manera de como podemos vincular bases de datos con Silverlight, vamos a continuar con los servicios web ASP.NET.
Crea un nuevo proyecto en Visual Studio, de tipo Web Service Application ¡Aguas! Debes haber seleccionado el Framework 3.5.
Al aparecer el proyecto generado obtendrás una pantalla como la siguiente.
Como puedes ver el método lleva antes el prefijo [WebMethod] y es público, debes considerar estos dos elementos para poder hacer tu método accesible desde la web, y es aquí en donde nos encargaremos de crear tres métodos, uno de consulta, uno de edición y uno de actualización (el de borrar quedará de tarea ¿Te late?).
Antes de continuar, debo aclarar algo muy importante, seré un tanto injusto al crear estos servicios comparados con los WCF pero quiero hacerlo de la forma mas básica para que de paso puedas cubrir una gama mas amplia de tecnologías, pero para calmar mi conciencia debo decirte que puedes mezclar tecnologías sin problemas.
Lo primero que insertaremos aquí será un método privado que nos permitirá el acceso a nuestra cadena de conexión.
private string cadenaConexion() { string cadena = "Data Source=SERVIDORAMIN;Initial Catalog=Directorio;Integrated Security=True;"; return cadena; } |
Consultar información
Este método nos dará toda la información de nuestros contactos.
[WebMethod] public List<string> MostrarTodosLosContactos() { List<string> listaClientes = new List<string>(); SqlConnection conexion = new SqlConnection(cadenaConexion()); SqlDataAdapter adaptador; string Consulta = "SELECT * FROM Contacto"; DataTable datos = new DataTable(); adaptador = new SqlDataAdapter(Consulta, conexion); adaptador.Fill(datos); foreach (DataRow registros in datos.Rows) { listaClientes.Add(registros["ID"].ToString() + "|" + registros["Nombre"].ToString() + "|" + registros["APELLIDOS"].ToString() + "|" + registros["TELEFONO"].ToString() + "|" + registros["EMAIL"].ToString()); } return listaClientes; } |
Creamos una lista de tipo string y por medio de los datos que obtenemos de la consulta vamos llenando la lista, así de simple.
Insertar registros
Este método nos dará la posibilidad de insertar nuevos registros en nuestra tabla.
[WebMethod] public int InsertarNuevaFecha(string Nombre, string Apellidos, string Telefono, string Email) { string cadenaActualizar = "INSERT INTO Contacto (Nombre, APELLIDOS, TELEFONO, EMAIL) values (@nombre, @apellidos, @telefono, @email)"; int t = 0; using (SqlConnection conexion = new SqlConnection(cadenaConexion())) { SqlCommand comando = new SqlCommand(cadenaActualizar, conexion); conexion.Open(); comando.Parameters.AddWithValue("@nombre", Nombre); comando.Parameters.AddWithValue("@apellidos", Apellidos); comando.Parameters.AddWithValue("@telefono", Telefono); comando.Parameters.AddWithValue("@email", Email); t = comando.ExecuteNonQuery(); conexion.Close(); } return t; } |
Como puedes ver, lo que hacemos es simplemente recibir los parámetros y en base a ellos insertar un nuevo elemento en nuestra tabla, como es obligatorio que TODOS los métodos accesibles desde web regresen un valor, en este caso regresamos el valor de las operaciones realizadas.
Actualizar registros
Este método nos dará la posibilidad de modificar a los registros que ya tenemos, ya sea en uno solo o en todos sus atributos.
[WebMethod] public int ActualizarContacto(string ID, string Nombre, string Apellidos, string Telefono, string Email) { string cadenaActualizar = "UPDATE Contacto SET Nombre=@nombre, APELLIDOS=@apellidos, TELEFONO=@telefono, EMAIL=@email WHERE (ID =" + ID + ")"; int t = 0; using (SqlConnection conexion = new SqlConnection(cadenaConexion())) { SqlCommand comando = new SqlCommand(cadenaActualizar, conexion); conexion.Open(); comando.Parameters.AddWithValue("@nombre", Nombre); comando.Parameters.AddWithValue("@apellidos", Apellidos); comando.Parameters.AddWithValue("@telefono", Telefono); comando.Parameters.AddWithValue("@email", Email); t = comando.ExecuteNonQuery(); conexion.Close(); } return t;} |
Aquí de una forma muy parecida al método anterior recibimos todos los argumentos y con la sentencia SQL actualizamos los datos en función de su campo ID.
Bien, si ya tienes los métodos completados y ejecutas tu servicio web, el resultado será muy similar a esto.
Vamos a hacer una pequeña prueba y seleccionar el método MostrarTodosLosContactos, veras una pantalla así.
Si pruebas en los otros dos métodos notarás que te piden que llenes información, esto es debido a los parámetros que los métodos necesitan para poder operar de manera adecuada. En el caso del método que usamos, presiona el botón Invocar y tu resultado debe ser este.
Así es, nada mas que un XML que nos estará regresando la información que le solicitamos. Hasta aquí ya tenemos nuestro servicio web realizado, pero para que Silverlight pueda consumirlo, deberemos publicarlo en nuestro IIS, así que vamos para eso.
Publicar mi servicio en IIS
En la ruta C:\inetpub\wwwroot (debes tener instalado IIS para esto), crea una nueva carpeta.
Ya con la carpeta creada, vete al administrador de tu equipo. (Presiona la tecla de Windows + R y escribe el comando compmgmt.msc), selecciona al administrador de IIS, expande los nodos de la derecha hasta llegar a la posición de la siguiente imagen.
Al seleccionar la opción marcada te aparecerá una ventana como la de abajo, solo da clic en aceptar.
Y ahora verás que tu antigua carpeta se verá de la siguiente forma.
Ahora podremos regresar a Visual Studio y seleccionar en el menú de “Build” la opción de “Publish Service”.
En el cuadro de diálogo escoge la opción de File System en la opción de Publish method y en la de Target Location presiona el botón de “Examinar” (el de los tres puntitos pues).
Al presionar el botón de examinar, tendrás en pantalla ahora la siguiente ventana (si no te apareció es porque no estás corriendo tu Visual Studio en modo administrador), ahí simplemente selecciona la carpeta que acabas de crear.
Tu cuadro de diálogo inicial quedará de la siguiente forma.
Solo basta que presiones “Publish” y veas en la esquina inferior izquierda y en tu ventana de Output los siguientes mensajes.
Ya que tienes ese letrero, puedes escribir la url de tu sitio con la siguiente secuencia http://NombreDeTuServidor/NombreDeTuCarpeta/NombreDeTuServicio, en mi caso quedó así “http://localhost/ServicioASP/Service1.asmx”.
¡Listo! Ya tienes tu servicio web publicado. En el artículo cuatro de esta serie te mostraré como consumir este servicio web en tu aplicación, por ahora solo prueba los métodos, estos deben funcionar exactamente igual que en tu aplicación en modo de desarrollo ahora que ya esta en modo productivo.
ya tengo mi sitio en el servidor local iis , corre perfecto el localhost, pero e tratado de ponerlo en un servidor externo y cuando accedo a el me aparese solo codigo que estoy asieno mal ,
Hola, veo que al principio creas el método «MostrarTodosLosContactos()» que devuelve una lista de tipo «List», pero la clase «List» no esta creada. Como lo soluciono?
Estás completamente cierto Facundo, la lista debe ser tipo «string», en un minuto lo corregiré en el ejemplo, gracias por la observación
Muchas gracias, ahora puedo seguir. Muy bueno el tutorial, por cierto.
Hola que tal hice lo que dicen aqui en la informacion pero me tira el siguiente error.
Error HTTP 500.19 – Internal Server Error
No se puede obtener acceso a la página solicitada porque los datos de configuración relacionados de la página no son válidos.
Error de configuración Hay definida una sección ‘system.web.extensions/scripting/scriptResourceHandler’ duplicada
Interesante tu tutorial, pero me gustaria saber como hacer para publicar el servicio web desde código, lo que pasa es que estoy haciendo un instalador que copia la carpeta en el inetpub wwwroot, pero ahora necesito que se publique, he buscado, pero hasta ahora no he encontrado como automatizar este proceso para que el usuario «no haga nada». Si me pudieras guiar, te agradeceria mucho.
Hola, hice el servicio, me funciona perfecto cuando lo ejecuto desde el VS, pero cuando lo publiqué, no me apareció la página y solo me aparece:
Tenés idea de por qué puede ser?
Lo mismo me pasa con una página que tengo en el IIS.
Si lo abro desde el IE, lo abre y me muestra eso, si lo abro desde chrome, me descarga la página…
Toda información será bienvenida.
Saludos.
GRACIAS, una explicación simple que no se encuentra facilmente
Muchas gracias, buena la explicación con los pantallazos.
Buen día, estuve revisando tu tutorial, quería ver si alguien me puede apoyar con este problema.
Tengo un web service que corre perfectamente el local, pero al publicarlo en el servidor me manda el siguiente error:
This page contains the following errors:
error on line 1 at column 2: StartTag: invalid element name
Below is a rendering of the page up to the first error.
Alguien me puede decir como solucionar el problema, leí algunos blocqs sobre este error pero no he podido solucionar el problema.
Gracias
Una consulta a mi no me aparece el campo aspnet_client en la lista de default web site
Hola!, ¿Que tal?
Tengo una duda…
Realice un servicio web y lo intento consumir en android, mi servicio web contiene un método para insertar 2 números en una base de datos en SQL Server , cuando ejecuto mi servicio web realiza los registros, pero cuando intento publicar mi servicio web y accedo a el me manda un error de acceso al servidor SQL, anteriormente ya había consumido un servicio web en android pero en MySql y no se cual podría ser el error en esta ocasión, podrías ayudarme por favor?
Este tipo de servicios son SOAP y difícilmente los podrás consumir en Android, lo que debes hacer es crear un servicio tipo REST para poder moverte sin problemas y no se te dificulte la conexión.
Hola quisiera saber como consumir este servicio web
Lo haces por medio de SOAP