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

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

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

 

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.

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.

9 Comments

  1. 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 ,

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

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

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

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

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

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

Leave a Reply

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

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

WP-SpamFree by Pole Position Marketing