Pop

56.Servicios Web.API REST. MVC .Consumiendo Método Post- Visual Studio 2017

56-.Servicios Web.API REST. MVC- Consumiendo Método Post

- En este capítulo del curso de programación en c# con visual studio 2017,vamos a continuar con  los servicios web. En esta entrada vamos a consumir desde un cliente el método post que nos permite crear un un usuario en nuestro sistema.

- En la anterior entrada aprendimos a definir el método que guarda en nuestra base de datos dentro de un API /REST. En esta ocasión llamamos a este método desde un cliente mediante una llamada del tipo http://localhost:57963/API/Usuario.  Además de la ruta de la url a la que hacemos la petición debemos agregar a la petición el tipo de datos que espera nuestro método. Esto lo hacemos facilmente serializando y deserializando los objetos utilizando el formato JSON.

- En el video podéis ver el ejemplo:


- Os dejo un enla a una página de Microsoft donde podéis ver información más detallada:

- También os dejo el código del ejemplo visto en el video:

  • Clase usuario que serializamos en la petición:
public class Usuario
{
    string nombre = String.Empty;
    string email = String.Empty;
    byte[] pass = null;
    string codPais = String.Empty;

    public string Nombre { get => nombre; set => nombre = value; }
    public string Email { get => email; set => email = value; }
    public byte[] Pass { get => pass; set => pass = value; }
    public string CodPais { get => codPais; set => codPais = value; }
}

  • Ejemplo de petición:

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace GestionVarios
{
    public partial class APIREST : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

          protected void btnAltaUSuario_Click(object sender, EventArgs e)
        {
                string ResultadoCadena = String.Empty;

            Usuario u = new Usuario();
            u.Nombre = "Bart Simpson";
            u.Email = "BartSimpson@email.com";
            u.CodPais = "ARG";
            u.Pass = cifrar("BART");

            JsonSerializerSettings ConfigJson = new JsonSerializerSettings(); //Evitar que se serialicen los nodos cuyo valor sea nulo (Los ignora).
            ConfigJson.NullValueHandling = NullValueHandling.Ignore;
            byte[] Datos = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(u, Formatting.None, ConfigJson));

            HttpWebRequest WReq = (HttpWebRequest)HttpWebRequest.Create("http://localhost:57963/API/Usuario");
                WReq.ContentType = "application/json; charset=UTF-8";
                WReq.ContentLength = Datos.Length;
                WReq.Method = "POST";
                WReq.GetRequestStream().Write(Datos, 0, Datos.Length);

                HttpWebResponse res = (HttpWebResponse)WReq.GetResponse();
                Encoding Codificacion = ASCIIEncoding.UTF8;

                StreamReader SReader = new StreamReader(res.GetResponseStream(), Codificacion);
                ResultadoCadena = SReader.ReadToEnd();

            lblResultado.Text = ResultadoCadena;

               
            }

        private byte[] cifrar(string cadenaAcifrar)
        {
            String miclave = ConfigurationManager.AppSettings["clave"];
            byte[] claveCifrado = System.Text.Encoding.ASCII.GetBytes(miclave);
            Cifrado c = new Cifrado(claveCifrado);
            byte[] b = c.cifrar(cadenaAcifrar);
            return b;
        }
    }

 
}

55.Servicios Web.API REST. MVC .Método Post- Visual Studio 2017

55-.Servicios Web.API REST. MVC - Método Post

  - En este capítulo del curso de programación en c# con visual studio 2017,vamos a continuar con  con nuestro API REST. Recordando la definición de  API REST, podemos decir que  es cualquier interfaz entre sistemas que use HTTP para obtener datos o generar operaciones sobre esos datos en todos los formatos posibles, como XML y JSON. Es una alternativa a otros protocolos estándar de intercambio de datos como SOAP (Simple Object Access Protocol).

- En esta entrada vamos a crearnos un método POST. Con este método podremos almacenar nuevos usuarios en nuestra bases de datos haciendo peticiones desde diferentes cliente. En el video muestro un ejemplo con el código:


- En el video hemos visto como crear un método POST. En la siguiente entrada del blog veremos como consumir este método desde un cliente. Por el momento os dejo el código que hemos visto en el video.

  •  Clase usuario:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Pruebas.Models
{
    public class Usuario
    {
        string nombre = String.Empty;
        string email = String.Empty;
        byte[] pass = null;
        string codPais = String.Empty;

        public string Nombre { get => nombre; set => nombre = value; }
        public string Email { get => email; set => email = value; }
        public byte[] Pass { get => pass; set => pass = value; }
        public string CodPais { get => codPais; set => codPais = value; }
    }
}

  • Controlador UsuarioController:
using Pruebas.Models;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

namespace Pruebas.Controllers
{
    public class UsuarioController : ApiController
    {
        public Boolean  AltaUsuario(Usuario u)
        {
            Boolean todoOk = false;

            SqlConnection conexion = new SqlConnection(ConfigurationManager.ConnectionStrings["EmpresaConnectionString"].ConnectionString);
        
                try
                {
                    conexion.Open();
                    SqlCommand com = conexion.CreateCommand();
                    com.CommandType = System.Data.CommandType.StoredProcedure;
                    com.CommandText = "dbo.AltaUsuario";
                    com.Parameters.Add("@nombre", SqlDbType.VarChar, 255).Value = u.Nombre;
                    com.Parameters.Add("@email", SqlDbType.VarChar, 255).Value = u.Email;
                    com.Parameters.Add("@pass", SqlDbType.VarBinary, 8000).Value = u.Pass;
                    com.Parameters.Add("@codPais", SqlDbType.VarChar, 3).Value = u.CodPais;

                    com.ExecuteNonQuery();
                    todoOk = true;
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.ToString());
                }
                finally
                {
                    if (conexion != null && conexion.State == System.Data.ConnectionState.Open)
                        conexion.Close();

                    conexion.Dispose();
                }
          
            return todoOk;
        }
    }
}


  • Procedimiento almacenado base de datos:

ALTER PROCEDURE [dbo].[AltaUsuario]
    @nombre varchar(255),
    @email varchar(255),
    @pass varbinary(MAX),
    @codPais varchar(3)
AS
BEGIN

    SET NOCOUNT ON;

    DECLARE @idpais int
    DECLARE @emailAux varchar(255)
   
    SELECT  @emailAux=Email FROM Usuarios WITH(NOLOCK) WHERE email= @email

    IF(@emailAux<>'')
    BEGIN
        RAISERROR('Ya existe un usuario con este email',16,1);
        RETURN -1
    END

    SELECT @idpais=idPais FROM Paises WITH(NOLOCK) WHERE CodPais = @codPais

    INSERT INTO dbo.Usuarios(Nombre,Email,Pass,IdPais) VALUES
   (@nombre,@email,@pass,@idpais)

END

54.Servicios Web.API REST. MVC .Consumiendo Método Get- Visual Studio 2017

54-.Servicios Web.API REST. MVC- Consumiendo Método Get

- En este capítulo del curso de programación en c# con visual studio 2017,vamos a continuar con  los servicios web. En esta entrada vamos a consumir desde un cliente el método get que nos devuelva todos los pedidos que tenemos almacenados en nuestra base de datos.

- En la anterior entrada aprendimos a definir un método dentro de un API /REST. En esta ocasión llamamos a este método desde un cliente mediante una llamada del tipo http://localhost:57963/API/PEDIDOS/. De esta forma podemos obtener  los pedidos que tenemos almacenados en nuestra base de datos, sin necesidad de acceder directamente a la base de datos desde nuestro cliente.

- En el video podéis ver el ejemplo:


- Como hemos visto en el video podemos obtener los valores de un origen de datos sin necesidad de acceder directamente a la base de datos de la que queremos obtener los datos.  La comunicación entre el cliente y el web service suele hacerse enviando y recibiendo los datos en formato JSON. Es de utilidad para trabajar con este formato agregar al proyecto la referencia Newtonsoft.Json que nos permite trabajar de una manera ágil con este tipo de datos.

- Os dejo código del ejemplo visto en el video:

  • Código de la página APIREST.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="APIREST.aspx.cs" Inherits="GestionVarios.APIREST" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>

            <asp:Button ID="btnListaUsuarios" runat="server" Text="Lista pedidos" OnClick="btnListaUsuarios_Click" />
            <asp:Button ID="btnAltaUSuario" runat="server" Text="Nuevo usuario" OnClick="btnAltaUSuario_Click" />
            <br />
            <asp:Label runat="server" ID="lblResultado"></asp:Label>

        </div>
    </form>
</body>
</html>




  •  Código de la página APIREST.aspx.cs

 using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace GestionVarios
{
    public partial class APIREST : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void btnListaUsuarios_Click(object sender, EventArgs e)
        {
            HttpWebResponse res = null;
            StreamReader SReader = null;
            String ResultadoCadena;
            string ruta = "http://localhost:57963/API/PEDIDOS/";
            try
            {
                HttpWebRequest WReq = (HttpWebRequest)HttpWebRequest.Create(ruta);
                WReq.ContentType = "application/json; charset=UTF-8";
                WReq.Method = "GET";
                res = (HttpWebResponse)WReq.GetResponse();
                Encoding Codificacion = ASCIIEncoding.UTF8;
                SReader = new StreamReader(res.GetResponseStream(), Codificacion);

                ResultadoCadena = SReader.ReadToEnd();
                lblResultado.Text = ResultadoCadena;
            }
            catch (WebException Exc)
            {
                var webResponse = (HttpWebResponse)Exc.Response;
                StreamReader Lector = new StreamReader(webResponse.GetResponseStream());
                string error = Lector.ReadToEnd();

            }
            finally
            {
                if (SReader != null)
                    SReader.Dispose();
                if (res != null)
                    res.Close();
            }
        }

        protected void btnAltaUSuario_Click(object sender, EventArgs e)
        {
                string ResultadoCadena = String.Empty;

            Usuario u = new Usuario();
            u.Nombre = "Bart Simpson";
            u.Email = "BartSimpson@email.com";
            u.CodPais = "ARG";
            u.Pass = cifrar("BART");

            JsonSerializerSettings ConfigJson = new JsonSerializerSettings(); //Evitar que se serialicen los nodos cuyo valor sea nulo (Los ignora).
            ConfigJson.NullValueHandling = NullValueHandling.Ignore;
            byte[] Datos = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(u, Formatting.None, ConfigJson));

            HttpWebRequest WReq = (HttpWebRequest)HttpWebRequest.Create("http://localhost:57963/API/Usuario");
                WReq.ContentType = "application/json; charset=UTF-8";
                WReq.ContentLength = Datos.Length;
                WReq.Method = "POST";
                WReq.GetRequestStream().Write(Datos, 0, Datos.Length);

                HttpWebResponse res = (HttpWebResponse)WReq.GetResponse();
                Encoding Codificacion = ASCIIEncoding.UTF8;

                StreamReader SReader = new StreamReader(res.GetResponseStream(), Codificacion);
                ResultadoCadena = SReader.ReadToEnd();

            lblResultado.Text = ResultadoCadena;

              
            }

        private byte[] cifrar(string cadenaAcifrar)
        {
            String miclave = ConfigurationManager.AppSettings["clave"];
            byte[] claveCifrado = System.Text.Encoding.ASCII.GetBytes(miclave);
            Cifrado c = new Cifrado(claveCifrado);
            byte[] b = c.cifrar(cadenaAcifrar);
            return b;
        }
    }

 
}

public class Usuario
{
    string nombre = String.Empty;
    string email = String.Empty;
    byte[] pass = null;
    string codPais = String.Empty;

    public string Nombre { get => nombre; set => nombre = value; }
    public string Email { get => email; set => email = value; }
    public byte[] Pass { get => pass; set => pass = value; }
    public string CodPais { get => codPais; set => codPais = value; }
}

53.Servicios Web.API REST. MVC .Método Get- Visual Studio 2017

53-.Servicios Web.API REST. MVC - Método Get

  - En este capítulo del curso de programación en c# con visual studio 2017,vamos a continuar con  los servicios web.En esta ocación vamos a empezar a crear un API REST. Como definición podemos decir que  es cualquier interfaz entre sistemas que use HTTP para obtener datos o generar operaciones sobre esos datos en todos los formatos posibles, como XML y JSON. Es una alternativa a otros protocolos estándar de intercambio de datos como SOAP (Simple Object Access Protocol).

- En esta entrada vamos a crearnos un método get que nos devuelva todos los pedidos que tenemos almacenados en nuestra base de datos.Estos métodos se definen para que los clientes que invoquen a nuestra API puedan obtener los datos que nosotros queramos darles. En este caso en el video vemos como crear un método que posteriormente consumiremos desde un cliente.



- Como hemos visto en el video primero creamos un proyecto de tipo Web API. Después creamos dentro de nuestra carpeta Models una clase llamada Pedidos:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Pruebas.Models
{
    public class Pedidos
    {
        private string nomreCliente;
        string fechaPedido;

        public string NomreCliente { get => nomreCliente; set => nomreCliente = value; }
        public string FechaPedido { get => fechaPedido; set => fechaPedido = value; }
    }
}

- Debemos agregar también un controlador para trabajar con los pedidos. De momento la clase tendrá un método que nos devuelva una lista con todos los pedidos almacenados. El código fuente es el siguiente:

using Pruebas.Models;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data.SqlClient;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

namespace Pruebas.Controllers
{
    public class PedidosController : ApiController
    {
      

        public List<Pedidos> getPedidos()
        {
            List<Pedidos> pedidosController = new List<Pedidos>();
            SqlConnection conexion = new SqlConnection(ConfigurationManager.ConnectionStrings["EmpresaConnectionString"].ConnectionString);

            try
            {
                conexion.Open();
                SqlCommand com = conexion.CreateCommand();
                com.CommandType = System.Data.CommandType.StoredProcedure;
                com.CommandText = "DamePedidos";


                SqlDataReader reader = com.ExecuteReader();
                while (reader.Read())
                {
                    Pedidos p = new Pedidos();
                    if (reader["Nombre"] != null)
                        p.NomreCliente = reader["Nombre"].ToString();
                   if (reader["FechaPedido"] != null )
                        p.FechaPedido = reader["FechaPedido"].ToString();


                    pedidosController.Add(p);
                }
            }


            catch (Exception ex)
            {
                throw new Exception(ex.ToString());
            }
            finally
            {
                if (conexion != null && conexion.State == System.Data.ConnectionState.Open)
                    conexion.Close();

                conexion.Dispose();
            }
            return pedidosController;
       }
        

        }
    }

- En la siguiente entrada aprenderemos a consumir este método desde un cliente.

52.Servicios Web.Nuevo método en nuestro WS. Curso de C# con Visual Studio 2017.

52-.Servicios Web.Nuevo método en nuestro WS

  - En este capítulo del curso de programación en c# con visual studio 2017,vamos a continuar con  los servicios web.En esta ocación vamos a añadir un método más a nuestro servicio web para continuar practicando.
- En entradas anteriores del blog teniamos hecha la lógica para dar de alta un usuario en nuestra base de datos.Vamos a añadir al servicio web este método con su correspondiente lógica para guardar en base de datos.Además vamos a proceder a llamar al nuevo método recien implementado desde nuestro cliente.
- En el video muestro este proceso:


- Os dejo el código de ejemplo desglsoado por partes.

  • Nuevo método de Alta de Usuario de nuestro web service
        [WebMethod]
        [SoapHeader("Authentication")]
        public Boolean AltaUsuario(byte[] passCifrada, string nombreUsuario, string email, string codPais)
        {
            Boolean todoOk = true;
            SqlConnection conexion = new SqlConnection(ConfigurationManager.ConnectionStrings["EmpresaConnectionString"].ConnectionString);
            if (Authentication.usuario == ConfigurationManager.AppSettings["Usuario"].ToString() && Authentication.pass == ConfigurationManager.AppSettings["Pass"].ToString())
            {
                try
                {
                    conexion.Open();
                    SqlCommand com = conexion.CreateCommand();
                    com.CommandType = System.Data.CommandType.StoredProcedure;
                    com.CommandText = "dbo.AltaUsuario";
                    com.Parameters.Add("@nombre", SqlDbType.VarChar, 255).Value = nombreUsuario;
                    com.Parameters.Add("@email", SqlDbType.VarChar, 255).Value = email;
                    com.Parameters.Add("@pass", SqlDbType.VarBinary, 8000).Value = passCifrada;
                    com.Parameters.Add("@codPais", SqlDbType.VarChar, 3).Value = codPais;

                    com.ExecuteNonQuery();
                }


                catch (Exception ex)
                {
                    throw new Exception(ex.ToString());
                }
                finally
                {
                    if (conexion != null && conexion.State == System.Data.ConnectionState.Open)
                        conexion.Close();

                    conexion.Dispose();
                }
            }
            else todoOk = false;

            return todoOk;
        }

  • Llamada para el alta de ususario desde nuestro cliente.Código de la parte de servidor:

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace GestionVarios
{
    public partial class AltaUsuario : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void mbtnRegistrar_Click(object sender, EventArgs e)
        {
            lblError.Visible = true;
            if (chkCondiciones.Checked == false)
            {
                
                lblError.Text = "Debes aceptar los términos y condiciones del servicio.";
            }
            else
            {
                byte[] passCifrada = cifrar(mtxtPassword.Text.Trim());
                if (guardarUsuario(passCifrada))
                {
                    lblError.Text = "Usuario dado de alta correctamente";
                    lblError.ForeColor = Color.Green;
                }

            }
        }

        private Boolean guardarUsuario(byte[] passCifrada)
        {
            Boolean todoOk = true;
            SqlConnection conexion = new SqlConnection(ConfigurationManager.ConnectionStrings["EmpresaConnectionString"].ConnectionString);
            try
            {
                WSPruebas.Pruebas pruebas = new WSPruebas.Pruebas();
                pruebas.AuthHeaderValue = new WSPruebas.AuthHeader();
                pruebas.AuthHeaderValue.pass = "pass";
                pruebas.AuthHeaderValue.usuario = "pepe";

                todoOk= pruebas.AltaUsuario(passCifrada, txtnombre.Text, mtxtEMail.Text, cmbPaises.SelectedValue);

            }
            catch (Exception ex)
            {
                lblError.Text = "Se produjo un error guardando el usuario." + ex.Message;
                lblError.ForeColor = Color.Red;
                todoOk = false;
            }
         

            return todoOk;
        }

        private byte[] cifrar(string cadenaAcifrar)
        {
            String miclave = ConfigurationManager.AppSettings["clave"];
            byte[] claveCifrado = System.Text.Encoding.ASCII.GetBytes(miclave);
            Cifrado c = new Cifrado(claveCifrado);
            byte[] b = c.cifrar(cadenaAcifrar);
            return b;
        }



    }
}



51.Servicios Web.Autenticación Básica. Curso de C# con Visual Studio 2017.

51-.Servicios Web.Autenticación básica

   - En este capítulo del curso de programación en c# con visual studio 2017,vamos a continuar con  los servicios web. Puede ser que no queramos que los métodos de nuestro web service esten accesibles para todo el mundo que conozca la url del servicio al que se realiza la petición. En este caso podemos poner algún mecanismo para validar que quien accede a nuestro web service, es alguien en el que confiamos.

- Uno de las formas de validación más antiguas son las cabeceras SOAP. Los nuevos servicios web suelen hacerse con WCF. Pero en esta entrada del blog vamos a ver un ejemplo de la antigua autenticación SOAP. En el video muestro un ejemplo sobre como poder utilizar las cabeceresa soap en el web service y como realizar la llamada desde un cliente.


- En primer lugar añadimos la cabecera  [SoapHeader("Authentication")] al método que queramos securizar:

        [WebMethod]
        [SoapHeader("Authentication")]

        public List<Pedidos> DamePedidos()
        { ...}

- En segundo lugar nos creamos una clase que herede de  SoapHeader, como por ejemplo esta:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services.Protocols;

namespace ServicioWebPruebas
{
    public class AuthHeader : SoapHeader
    {
      
            public string usuario;
            public string pass;    
       
    }
}

- En tercer lugar implementamos la validación en el método que queramos securizar:

        public AuthHeader Authentication;

        [WebMethod]
        [SoapHeader("Authentication")]
        public List<Pedidos> DamePedidos()
        {

            List<Pedidos> listaPedidos = new List<Pedidos>();
            SqlConnection Con = new SqlConnection(ConfigurationManager.ConnectionStrings["EmpresaConnectionString"].ConnectionString);
            if (Authentication.usuario == ConfigurationManager.AppSettings["Usuario"].ToString() && Authentication.pass == ConfigurationManager.AppSettings["Pass"].ToString())
              
            {
            try
            {
                Con.Open();
                SqlCommand Com = Con.CreateCommand();
                Com.CommandText = "[DamePedidos]";
                Com.CommandType = CommandType.StoredProcedure;
                SqlDataReader reader = Com.ExecuteReader();

                while (reader.Read())
                {
                    Pedidos pedAuc = new Pedidos();

                    pedAuc.NombreUsuario = reader["Nombre"].ToString();
                    pedAuc.FechaPedido1 = Convert.ToDateTime(reader["FechaPedido"].ToString());
                    listaPedidos.Add(pedAuc);
                }


            }
            catch (Exception ex)
            {
                throw new Exception(ex.ToString());
            }
            finally
            {
                if (Con.State == ConnectionState.Open)
                    Con.Close();
                Con.Dispose();
            }
        }
     

            return listaPedidos;
        }

     
    }


- Una vez tenemos echo esto, será necesario para poder consumir el método del web service pasar un usuario y una password.Por ejemplo la llamada a este método desde un cliente sería:

            WSPruebas.Pruebas pruebas = new WSPruebas.Pruebas();
            pruebas.AuthHeaderValue = new WSPruebas.AuthHeader();
            pruebas.AuthHeaderValue.pass = "pass";
            pruebas.AuthHeaderValue.usuario = "pepe";

            WSPruebas.Pedidos[] x = pruebas.DamePedidos();




50.Servicios Web.Consumiendo un web service. Curso de C# con Visual Studio 2017.

50-.Servicios Web.Consumiendo un web service

   - En este capítulo del curso de programación en c# con visual studio 2017,vamos a continuar con  los servicios web. En ocasiones, puede ser que necesitemos cierta funcionalidad  que nos permitan intercomunicar sistemas o obtener datos de otros sistemas.Los servicios web proporcionan mecanismos de comunicación estándares entre diferentes aplicaciones, que interactúan entre sí para presentar información dinámica al usuario.

- En el ejemplo que muestro en el video la arquitectura que se pretende simular es similar a la siguiente con la salvedad que en mi caso lo tengo todo montado en mi máquina local:



- Con esta arquitectura el cliente se comunica con el servidor web que tiene alojada la página que el usuario está consumiendo. La página llama a un web service para obtener los datos necesarios(en nuestro ejemplo una lista de pedidos) y es el web service el que se comunica con la base de datos para obtener los datos necesarios que el usuario finalmente visualiza en su navegador.
Os dejo el video con el ejmplo:


- De esta forma podemos tener la bbdd en una máquina, el web service en otra y la página que ve el usuarioen otra, con lo que conseguimos interoperabilidad entre aplicaciones de software independientemente de sus propiedades o de las plataformas sobre las que se instalen.

- Os dejo por aqui también la clase que llama al web service una vez tenemos agregada la referencia en nuestro proyecto:

  • Código aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="PaginaParaLlamarWS.aspx.cs" Inherits="GestionVarios.PaginaParaLlamarWS" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:Label runat="server" ID="lblPedidos"></asp:Label>
        </div>
    </form>
</body>
</html>

  •  Código cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace GestionVarios
{
    public partial class PaginaParaLlamarWS : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            WSPruebas.Pruebas pruebas = new WSPruebas.Pruebas();
            WSPruebas.Pedidos[] x = pruebas.DamePedidos();

            foreach(WSPruebas.Pedidos p in x)
            {
                lblPedidos.Text += p.NombreUsuario + " " + p.FechaPedido1.ToShortDateString() +"<br>";
            }
           
        }
    }
}

49.Servicios Web.Introducción. Curso de C# con Visual Studio 2017.

49-.Servicios Web.Introducción

   - En este capítulo del curso de programación en c# con visual studio 2017,vamos a empezar a conocer los servicios web. En ocasiones, puede ser que necesitemos cierta funcionalidad  que nos permitan intercomunicar sistemas o obtener datos de otros sistemas.Los servicios web proporcionan mecanismos de comunicación estándares entre diferentes aplicaciones, que interactúan entre sí para presentar información dinámica al usuario. Los servicios web proporcionan interoperabilidad y extensibilidad entre estas aplicaciones, y que al mismo tiempo sea posible su combinación para realizar operaciones complejas.

- En el video os muestro como crear un proyecto del tipo web service, como agregarle de una manera sencilla la capacidad  de obtener  datos de una base de datos SQL, y de esta manera tener preparado un método del web service  para ser consumido posteriormente por un cliente.





Os dejo un enlace a con más información:https://msdn.microsoft.com/es-es/library/t745kdsh(v=vs.100).aspx

También os dejo el código del web service:

  • Clase Pedidos.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace ServicioWebPruebas
{
    public class Pedidos
    {
        DateTime FechaPedido;
        String nombreUsuario;
        public DateTime FechaPedido1 { get => FechaPedido; set => FechaPedido = value; }
        public string NombreUsuario { get => nombreUsuario; set => nombreUsuario = value; }
    }
}

  • Clase Pruebas.asmx
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.Services;

namespace ServicioWebPruebas
{
    /// <summary>
    /// Descripción breve de Pruebas
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // Para permitir que se llame a este servicio web desde un script, usando ASP.NET AJAX, quite la marca de comentario de la línea siguiente.
    // [System.Web.Script.Services.ScriptService]
    public class Pruebas : System.Web.Services.WebService
    {

        [WebMethod]
        public string HelloWorld()
        {
            return "Hola a todos";
        }

        [WebMethod]
        public List<Pedidos> DamePedidos()
        {
            SqlConnection Con = new SqlConnection(ConfigurationManager.ConnectionStrings["EmpresaConnectionString"].ConnectionString);
            List<Pedidos> listaPedidos = new List<Pedidos>();
            try
            {
                Con.Open();
                SqlCommand Com = Con.CreateCommand();
                Com.CommandText = "[DamePedidos]";
                Com.CommandType = CommandType.StoredProcedure;
                SqlDataReader reader = Com.ExecuteReader();

                while (reader.Read())
                {
                    Pedidos pedAuc = new Pedidos();

                    pedAuc.NombreUsuario = reader["Nombre"].ToString();
                    pedAuc.FechaPedido1 = Convert.ToDateTime(reader["FechaPedido"].ToString());
                    listaPedidos.Add(pedAuc);
                }
             

            }
            catch (Exception ex)
            {
                throw new Exception(ex.ToString());
            }
            finally
            {
                if (Con.State == ConnectionState.Open)
                    Con.Close();
                Con.Dispose();
            }

            return listaPedidos;
        }
    }
}

Curso .NET Core en C# - 34.Creamos nuestro propio log

34.Creamos nuestro propio log Hola a todos. En este curso, analizaremos todos los conceptos básicos, intermedios y avanzados de  ASP.NET...