Me disculpo porque ya tengo mucho
tiempo de no escribir, pero no es porque
no lo desee sino porque no he tenido tiempo.
Hoy les quiero escribir acerca de
cómo crear un servicio web con Visual Studio
y C#, como todas las demás publicaciones esto se hará de manera sencilla. Ok… entonces
manos a la obra :)
Creamos un nuevo proyecto en Visual Studio.
Seleccionemos Framework 3.5
El proyecto debe de ser tipo Web Service Application.
Una vez que hemos dado un nombre al proyecto (en mi caso "miprimerservicio") y hemos decido donde lo vamos a guardar, damos click en ok y no aparecerá el proyecto generado y obtendremos una pantalla como la siguiente.

En este archivo .cs es donde vamos a escribir el código que se ejecutara cuando alguien consuma nuestro servicio. Aquí escribimos C# común y silvestre en nuestro caso vamos a escribir 4 métodos que inserten, actualicen, eliminen y seleccionen datos de una tabla. Para ello debemos saber lo siguiente:
Tenemos un base de datos llamada Testing la cual posee una tabla llamada persona y esta a su vez tiene 4 campos los cuales son idpersona ( int, se auto-incrementa en 1), nombre (nvarchar), apellido (nvarchar) y activo (true). En nuestra BD Testing tenemos 4 procedimientos almacenados que se encarga de insertar, actulizar, eliminar y seleccionar información de la tabla persona.
sp_delete_persona -- Elimina una persona
sp_insert_persona -- inserta una persona
sp_select_persona -– Selecciona las persona
sp_update_persona -– Actualizan persona
Dentro de la clase publica escribimos los métodos
public class Service1 : System.Web.Services.WebService
{
}
No
olvidar importar las clase
using System.Data;
using
System.Data.SqlClient;
VARIABLE PARA MANEJO DE ERROR
string error = "";
FUNCION
PARA MANEJO DE LA CONEXION A SQLSERVER
private string conexion()
{
string cadena = @"Data Source=.;Initial
Catalog=TESTING;Integrated Security=True";
return cadena;
}
/*
El atributo WebMethod se asocia a un método Public
para indicar que se desea exponer dicho método
como
parte del servicio Web
XML. */
//Método
para insertar una fila en tabla persona
[WebMethod]
public string InsertRow(string wnombre, string wapellido, bool wactivo)
{
SqlConnection conn = new SqlConnection(conexion());
SqlCommand cmd = new SqlCommand("sp_insert_persona", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@wnombre", SqlDbType.NVarChar, 50).Value = wnombre;
cmd.Parameters.Add("@wapellido", SqlDbType.NVarChar, 50).Value = wapellido;
cmd.Parameters.Add("@wactivo", SqlDbType.Bit, 4).Value = wactivo;
cmd.Parameters.Add("@msg", SqlDbType.NVarChar, 100).Direction = ParameterDirection.Output;
try
{
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
catch (System.Exception ex)
{
error = "Error: " +
ex.Message;
}
return error;
}
//Método para actualizar
una fila en tabla persona
[WebMethod]
public string UpdateRow(string wnombre, string wapellido, bool wactivo, int widpersona)
{
wactivo = true;
SqlConnection conn = new SqlConnection(conexion());
SqlCommand cmd = new SqlCommand("sp_update_persona", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@wnombre", SqlDbType.NVarChar, 50).Value = wnombre;
cmd.Parameters.Add("@wapellido", SqlDbType.NVarChar, 50).Value = wapellido;
cmd.Parameters.Add("@wactivo", SqlDbType.Bit, 1).Value = wactivo;
cmd.Parameters.Add("@widpersona", SqlDbType.Int, 10).Value = widpersona;
cmd.Parameters.Add("@msg", SqlDbType.NVarChar, 100).Direction = ParameterDirection.Output;
try
{
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
catch (System.Exception ex)
{
error = "Error: " +
ex.Message;
}
return error;
}
//Método
para eliminar una fila en tabla persona
[WebMethod]
public string DeleteRow(int widpersona)
{
SqlConnection conn = new SqlConnection(conexion());
SqlCommand cmd = new SqlCommand("sp_delete_persona", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@widpersona", SqlDbType.Int, 10).Value = widpersona;
cmd.Parameters.Add("@msg", SqlDbType.NVarChar, 100).Direction = ParameterDirection.Output;
try
{
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
catch (System.Exception ex)
{
error = "Error: " +
ex.Message;
}
return error;
}
//Método
para seleccionar una fila en tabla persona
[WebMethod]
public List<string> SelectRow()
{
List<string> lista = new List<string>();
SqlConnection conn = new SqlConnection(conexion());
SqlCommand cmd = new SqlCommand("sp_select_persona", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@msg", SqlDbType.NVarChar, 100).Direction = ParameterDirection.Output;
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
try
{
da.Fill(dt);
foreach (DataRow dr in dt.Rows)
{
lista.Add(dr["nombre"].ToString()
+ "--" + dr["apellido"].ToString());
}
}
catch (System.Exception ex)
{
error = "Error:
" +
ex.Message;
}
return lista;
}
Una vez que tenemos
listos los métodos no queda más que ejecutar el proyecto y obtendremos un pantalla como la siguiente:
Y ya podemos probar los métodos de nuestro servicio web, si seleccionamos
insert nos pedirá datos para guardarlos
en la BD.
Lo que obtendremos si probamos el método SelectRow será un XML que nos estará
regresando la información que le solicitamos.
Hasta aquí ya tenemos nuestro
servicio web realizado, pero para que pueda ser consumido, deberemos publicarlo
en nuestro IIS. Y esto lo veremos en nuestra próxima entrada.
Les dejos el código
de los procedimientos almacenados por si quiere hacer la prueba… Saludos.
USE testing
-- ================================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Osman
Orozco>
-- Create date: <22/06/2013>
-- Description: <inserta datos en tabla persona>
-- =============================================
if object_id('sp_insert_persona') is not null
begin
drop procedure sp_insert_persona
end
go
create procedure sp_insert_persona
@wnombre varchar(50),
@wapellido varchar(50),
@wactivo bit,
@msg as varchar(100) output
as
begin
set nocount on;
begin tran tadd
begin try
insert into persona (nombre,apellido,activo) values (@wnombre,@wapellido,@wactivo)
commit tran tadd
end try
begin catch
set @msg = 'Error: ' + ERROR_MESSAGE() + ' en la linea ' + convert(nvarchar(255),ERROR_LINE()) + '.'
rollback tran tadd
end catch
end
go
-- ================================================
-- FIN SP INSERT
-- ================================================
-- ================================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Osman
Orozco>
-- Create date: <22/06/2013>
-- Description: <Selecciona datos en tabla persona>
-- =============================================
if object_id('sp_select_persona') is not null
begin
drop procedure sp_select_persona
end
go
create procedure sp_select_persona
@msg as varchar(100) output
as
begin
set nocount on;
begin tran tadd
begin try
select * from persona
commit tran tadd
end try
begin catch
set @msg = 'Error: ' + ERROR_MESSAGE() + ' en la linea: ' + convert(nvarchar(255),ERROR_LINE()) + '.'
rollback tran tadd
end catch
end
go
-- ================================================
-- FIN SP SELECT
-- ================================================
-- ================================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Osman
Orozco>
-- Create date: <22/06/2013>
-- Description: <Actualiza datos en tabla persona>
-- =============================================
if object_id('sp_update_persona') is not null
begin
drop procedure sp_update_persona
end
go
create procedure sp_update_persona
@wnombre varchar(50),
@wapellido varchar(50),
@wactivo bit,
@widpersona int,
@msg as varchar(100) output
as
begin
set nocount on;
begin tran tadd
begin try
update persona set nombre=@wnombre,apellido=@wapellido,activo=@wactivo
where idpersona=@widpersona
commit tran tadd
end try
begin catch
set @msg='Error: ' + ERROR_MESSAGE() + ' en la linea: '
+ convert(nvarchar(255),ERROR_LINE()) + '.'
rollback tran tadd
end catch
end
go
-- ================================================
-- FIN SP UPDATE
-- ================================================
-- ================================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Osman
Orozco>
-- Create date: <22/06/2013>
-- Description: <Elimina datos en tabla persona>
-- =============================================
if object_id('sp_delete_persona') is not null
begin
drop procedure sp_delete_persona
end
go
create procedure sp_delete_persona
@widpersona int,
@msg as varchar(100) output
as
begin
set nocount on;
begin tran tadd
begin try
delete persona where idpersona=@widpersona
commit tran tadd
end try
begin catch
set @msg='Error: ' + ERROR_MESSAGE() + ' en la linea ' + convert(nvarchar(255),ERROR_LINE()) + '.'
rollback tran tadd
end catch
end
go
-- ================================================
-- FIN SP ELIMINA DATO
-- ================================================







una pregunta, que visual usas, tengo el ultimate
ResponderEliminarTengo la misma version que vos... Visual Studio 2012 Ultimate.
EliminarMuchas Gracias Osman por compartir tu trabajo y tu valioso tiempo.,
ResponderEliminarHola buen dia muy bueno tu aporte, mi consulta es saber si tendras un ejemplo de listado dinamico con gridview usando WebService?
ResponderEliminar