Servicios Wcf

introduccion1
Servicio Wcf

Las siglas en «Azure WCF Service Web Role» significan «Windows Communication Foundation», se utiliza para implementar aplicaciones y orientarlas para dar servicios o datos.

Enlace:
https://docs.microsoft.com/es-es/dotnet/framework/wcf/whats-wcf

  • Un servicio chat real de forma asíncrona.
  • Consumir un servicio que lea archivos xml o json y nos de datos.
  • Hacer presentaciones lógicas a partir de sondeos, etc.

Estos servicios pueden enviarse de forma asíncrona a un cliente y consumirlo, ya sean datos, mensajes o cualquier otro servicio. Se pueden enviar datos en cualquier formato ligero como xml o json y consumirlo con el cliente.

Se podría utilizar para los siguientes casos:

¿Qué es Azure?

introduccion2
Azure Cloud Computing

Azure en un servicio para la computación en la nube, esta plataforma permite implementar o desplegar servicios, hospedajes de datos, máquinas virtuales, funciones, servicios, contenedores, etc.

Ofrece una gran cantidad de servicios que el cliente puede consumir y adaptarlo a su necesidad con mayor capacidad de computación en la nube que cualquier otro ordenador de escritorio.

Azure Cloud Service

introduccion3
Platform As Service

Se define como «Paas», en español, plataforma como servicio. Se hospedan en máquinas virtuales y es compatible con aplicaciones escalables donde tu pagas por el uso que haces de tus servicios o aplicaciones desplegadas en la nube.

Este servicio en la nube sera necesario para poder desplegar y hospedar nuestro servicio Azure WCF Service Web Role.

Azure Web Role

introduccion4
Azure Web Role

Es un servicio de Azure que esta configurado para funcionar con aplicaciones compatibles con «ISS».

Por lo tanto, este servicio implementa automáticamente la aplicación a través de «IIS», «Internet Information Services», pueden utilizar un rol web para tratar solicitudes y transmitirlas a un rol de trabajo.

Creación de servicio Azure WCF Service Web Role.

El servicio lo crearemos con Visual Studio 2017, la aplicación es de tipo Azure Cloud Service, llamada «EjemploWfcWSR», en esta aplicación, daremos un servicio para recuperar la secuencia de números de Fibonacci a partir del número que nos den.

Creación de proyectoAzure Cloud Service

Para crear un nuevo seleccionamos la opción de File -> New Proyect -> Office Sharepoint -> Cloud -> Azure Cloud service, y le damos el nombre que queramos.

servicio1
Creación de proyecto

Ahora seleccionamos el rol de “WCF Service Web Role”, y le damos a Ok.

servicio2
Selección de rol

Ahora la aplicación nos habrá creado dos proyectos, un proyecto Cloud con la configuración de la aplicación y roles, y la otra el servicio WCF seleccionado anteriormente.

Creación de Servicio

Ahora, sobre el proyecto de servicio WCF, hacemos Click Derecho -> Add -> New Item -> WCF Service, y le daré el nombre de «ServicioFibonacci».

servicio3
Interfaz de servicio

Esto nos creara dos archivos, uno es la interfaz del servicio con el contrato de datos y el otro es un archivo .svc es un fichero de texto que contiene los detalles requeridos para que el servicio funcione.

Contrato de servicio y funcionalidad

Ahora sobre la interfaz, editaremos los contratos de datos de nuestro servicio.

Código:

// NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IServicioFibonacci" in both code and config file together.
    [ServiceContract]
    public interface IServicioFibonacci
    {
        [OperationContract]
        List<int> GetNumerosFibonacci(int num);
    }

Para el siguiente paso, modificaremos el archivo .svc del servicio donde incluiremos a nivel de clase la compatibilidad con ASP Net para poder consumirlo en un cliente Web y programaremos la secuencia Fibonacci.

Código:

// NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "ServicioFibonacci" in code, svc and config file together.
    // NOTE: In order to launch WCF Test Client for testing this service, please select ServicioFibonacci.svc or ServicioFibonacci.svc.cs at the Solution Explorer and start debugging.
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class ServicioFibonacci : IServicioFibonacci
    {
        public List<int> GetNumerosFibonacci(int num)
        {
            List<int> FibonacciList = new List<int>();
            int a = 1, b = 0;
            // Secuencia fibonacci
            for (int i = 0; i < num; i++)
            {
                int tmp = a;
                a = b;
                b = tmp + b;
                FibonacciList.Add(b);
            }
            return FibonacciList;
        }
    }

Configuración Web del servicio

Por último, configuraremos el «Web.config», donde estableceremos nuestros servicios con el nombre de la configuración y la conexión de HttpBinding.
Los “service” apuntan a nuestra interfaz de servicio y que utiliza Http como transporte para un punto de conexión.

Los “behavior” contienen los valores con el comportamiento de cada servicio, por lo tanto modelo de servicios es el siguiente.

Código:

<system.serviceModel>
    <services>
      <service behaviorConfiguration="FibonacciBehavior" name="WCFServiceWebRole1.ServicioFibonacci">
        <endpoint address="ws" binding="basicHttpBinding" contract="WCFServiceWebRole1.IServicioFibonacci" />
        <endpoint address="ws2" binding="wsHttpBinding" contract="WCFServiceWebRole1.IServicioFibonacci" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="FibonacciBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
      multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

Prueba de funcionamiento del servicio

Ahora para probar el funcionamiento del servicio y que todo funciona, estableceremos el servicio como aplicación principal y sobre el proyecto hacemos Click derecho -> Debug -> Start New Instance.

Sobre esta ventana desplegaremos nuestro servicio e invocaremos el servicio con un valor numérico para comprobar su funcionamiento.

servicio4
WCF Instance

Empaquetado de proyecto WCF

Para finalizar, ahora hemos comprobado el funcionamiento de nuestro servicio, vamos a empaquetar nuestra aplicación, para ello haremos Click Derecho (Sobre el proyecto cloud) -> Package… -> Package.

servicio5
Package Azure Application

Ahora nos habrá generado dos archivos con la configuración del proyecto y el paquete del proyecto que próximamente subiremos a Azure, así que mantendremos el explorador abierto para tener a mano la dirección.

servicio6
WCF package y config file

Subida de servicio WCF a Azure Cloud Service

Ahora vamos a explicar los pasos para crear un servicio en Azure y subir nuestra aplicación para consumirla en un cliente.

Accederemos a nuestro portal de azure y haremos lo siguiente:

Creación de recurso Cloud Service

Primero, crearemos un recurso de tipo servicio en la nube simplemente escribiéndolo en el buscador y le daremos a crear.

azure1
Cloud Service

Ahora configuramos el servicio en la nube estableciendo el nombre de DNS, nuestra suscripción de Azure de estudiante o de pago y un grupo de recursos donde subirlo.

azure2
Creación de Cloud Service

Carga de paquetes de proyecto en Cloud Service

Ahora accederemos a nuestro recurso Cloud Service de Fibonacci y sobre la información general del servicio, pulsaremos sobre la opción de cargar.

azure3
Cargar aplicación WCF

Ahora procederemos a cargar nuestro paquete de servicio WCF, para ello seleccionaremos la ubicación de tipo local y nuestra cuenta de almacenamiento.

Seleccionamos nuestro paquete de proyecto .cspkg y de configuración de nuestro servicio .cscfg que hemos creado anteriormente al hacer “Package” y marcamos los dos checkbox de configuración para la implementación.

azure4
Carga de paquete WCF

Por último aceptamos y ya se nos habrá cargado nuestro servicio WCF y comprobamos que podemos acceder a nuestro servicio Fibonacci.

cliente3
Azure WCF Web Role

Consumo de Azure WCF Service Web Role en cliente ASP .Net

Por último nos crearemos un cliente para poder consumir nuestro servicio en la nube, para ello simplemente crearemos un proyecto ASP .Net Web Aplication de .Net Framework por ejemplo llamado “ClienteFibonacci”.

Creación de proyecto ASP .Net

Para ello haremos de click en File -> New Proyect -> ASP .Net Web Application(.NET Framework).

cliente1
Cliente ASP .Net

Seleccionamos la aplicación de tipo MVC, para que nos cree todos los recursos necesarios para crear directamente la página, referenciar y consumir el servicio.

cliente2
MVC Template

Referencia al servicio WCF

Para el siguiente paso, vamos a añadir una referencia a nuestro servicio WCF, para ello sobre References, haremos Click derecho -> Add Service Reference.

cliente4
Service Reference

Por último, en la dirección “Address”, pondremos el URL de nuestro servicio en la nube que apunta al archivo .svc del servicio.

Al pulsar en “Go”,podremos ver que nos reconoce nuestro método de “GetNúmerosFibonacci”, le damos un nombre la referencia y pulsamos Ok.

cliente5
Service Reference 2
c
Resultado de Service Reference

Para nuestro ejemplo, tendrá un método Index de GET y POST, donde tendremos un formulario con una caja numérica que al pulsar sobre calcular, nos mostrara una tabla con la secuencia de números de Fibonacci.

Creación de Vista y Controlador

Tendremos que instanciar el cliente apuntando al servicio y cargar un array de números enteros con nuestro método de “GetNumerosFibonacci(número)”, donde le llegara el número por POST del formulario y se lo devolveremos como modelo en View.

Código:

public class FibonacciController : Controller
    {
        // GET: Fibonacci
        public ActionResult Index()
        {
            return View();
        }

        // POST: Fibonacci
        [HttpPost]
        public ActionResult Index(int num)
        {
            int[] FibonacciArray;
            ServicioFibonacci.ServicioFibonacciClient client = new ServicioFibonacci.ServicioFibonacciClient("BasicHttpBinding_IServicioFibonacci");
            FibonacciArray = client.GetNumerosFibonacci(num);
            return View(FibonacciArray);
        }
  }

Por último vamos a crear la vista con el formulario y la tabla de los números para ello, en el controlador sobre Index, haremos Click derecho -> Add View.. y Empty.

La vista contendrá lo mencionado anterior mente, un formulario con el número a buscar y una tabla para mostrar los números Fibonacci, siempre y cuando llegue el Model, en cuyo caso mostrara el mensaje de “Sin resultados…”.

Código:

@model int[]
@{
    ViewBag.Title = "Index";
}

<h2>Calcular Secuencia Fibonacci</h2>
<form method="post">
    <div>
        <label>
            Número
        </label>
        <input type="number" name="num" placeholder="Introduce un número a calcular" class="form-control" />
    </div>
    <div>
        <button type="submit" class="btn-success">Calcular</button>
    </div>
</form>
<hr />
@if (Model != null)
{
    <h3>Resultado Fibonacci</h3>
    <table class="table table-bordered" style="border:2px solid black;">
        <thead>
            <tr>
                <th style="color:white;font-weight:bold;background-color:darkslateblue;">
                    Valores
                </th>
            </tr>
        </thead>
        <tbody>
            @foreach(int n in Model)
            {
                <tr>
                    <td>@n</td>
                </tr>
            }
        </tbody>
    </table>
}
else
{
    <h3>Sin resultados...</h3>
}

Resultado de consumo del servicio WCF en cliente

Como último paso, comprobaremos el funcionamiento del servicio, introducimos un número y comprobamos que nuestro servicio se consume sin problemas, siendo este el resultado.

cliente13
Consumo de Servicio en Cliente

Apunte Final

Hemos visto un ejemplo sencillo de consumir un servicio Azure WCF Service Web Role, teniendo en cuenta que WCF es un buen Framework para montar servicios, tenemos que tener en cuenta alternativas como Web Api, ya que es una forma más ligera para dar servicios.

Al igual que WCF, puede ser consumido por varios clientes usando Http con menor carga de trabajo y rapidez, por ello los servicios WCF están cayendo en desuso ya que los servicios tipo RESTful, son más eficientes y simples que los de tipo SOAP.

Autor/a: Dragos Marian Alecu

Curso: Microsoft MCSA Web Applications + Microsoft MCSD App Builder + Xamarin

Centro: Tajamar

Año académico: 2018-2019

Código / recursos utilizados / Otros datos de interés: https://github.com/Dalecu/ServicioFibonacci.git https://github.com/Dalecu/CClienteFibonacci.git

Leave a Comment

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.