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

Crear y publicar un servicio web ASP.NET (Parte 2)

Publicada el 16 febrero, 201227 septiembre, 2012
Twittear

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.

ServicioASP

 

Al aparecer el proyecto generado obtendrás una pantalla como la siguiente.

CodigoASP

 

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;
}

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;
}

[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;
}

[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;}

[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.

MetodosServicio

Vamos a hacer una pequeña prueba y seleccionar el método MostrarTodosLosContactos, veras una pantalla así.

MetodoContactos

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.

ResultadoOperacion

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.

IIS

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.

AplicacionIIS

 

Al seleccionar la opción marcada te aparecerá una ventana como la de abajo, solo da clic en aceptar.

Aplicacioniis2

Y ahora verás que tu antigua carpeta se verá de la siguiente forma.

Aplciacionterminada

Ahora podremos regresar a Visual Studio y seleccionar en el menú de “Build” la opción de “Publish Service”.

publicarApp

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).

VentanaPublicar

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.

ServidorIIS

Tu cuadro de diálogo inicial quedará de la siguiente forma.

VentanaFinal

Solo basta que presiones “Publish” y veas en la esquina inferior izquierda y en tu ventana de Output los siguientes mensajes.

Publicacion

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”.

ServicioPublicado

¡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.

Descarga aquí el código de ejemplo.

15 comentarios en «Crear y publicar un servicio web ASP.NET (Parte 2)»

  1. hyll dice:
    29 mayo, 2012 a las 3:00 am

    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 ,

    Responder
  2. Facundo dice:
    27 septiembre, 2012 a las 6:46 am

    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?

    Responder
    1. Amin Espinoza dice:
      27 septiembre, 2012 a las 2:41 pm

      Estás completamente cierto Facundo, la lista debe ser tipo «string», en un minuto lo corregiré en el ejemplo, gracias por la observación

      Responder
      1. Facundo dice:
        29 septiembre, 2012 a las 1:25 am

        Muchas gracias, ahora puedo seguir. Muy bueno el tutorial, por cierto.

        Responder
  3. Pintor dice:
    27 abril, 2013 a las 7:36 pm

    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

    Responder
  4. Liz dice:
    29 abril, 2013 a las 2:33 pm

    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.

    Responder
  5. Mariano dice:
    2 julio, 2013 a las 12:57 am

    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.

    Responder
  6. José Durazo dice:
    24 abril, 2014 a las 9:33 pm

    GRACIAS, una explicación simple que no se encuentra facilmente

    Responder
  7. AnzOne dice:
    14 mayo, 2014 a las 4:37 pm

    Muchas gracias, buena la explicación con los pantallazos.

    Responder
  8. Paty dice:
    12 marzo, 2015 a las 9:28 pm

    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

    Responder
  9. Hansel Tribeños Ibarra dice:
    2 julio, 2015 a las 4:58 pm

    Una consulta a mi no me aparece el campo aspnet_client en la lista de default web site

    Responder
  10. Jose Aaron dice:
    20 agosto, 2015 a las 10:49 pm

    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?

    Responder
    1. Amin Espinoza dice:
      30 noviembre, 2015 a las 10:59 pm

      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.

      Responder
  11. Maikel Cutiño Fernandez dice:
    11 enero, 2017 a las 3:43 am

    Hola quisiera saber como consumir este servicio web

    Responder
    1. Amin Espinoza dice:
      12 enero, 2017 a las 2:03 am

      Lo haces por medio de SOAP

      Responder

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