Creación de un servicio WCF, alojamiento en Azure y consumo MVC

 

En este post se explicará la creación de un servicio WCF (Windows Communication Foundation) que posteriormente publicaremos en Azure para su consumo mediante una web cliente creada con MVC.

Para este ejemplo utilizaremos la Conjetura de Collatz en la que se recibirá un valor entero positivo y se devolverá la serie de valores que confirma la conjetura de Collatz que se enuncia de la siguiente manera:

Sea la siguiente operación, aplicable a cualquier número entero positivo:

Si el número es par, se divide entre 2.

Si el número es impar, se multiplica por 3 y se suma 1.

Creación de la lógica del proyecto

  • Creamos una solución con un nuevo proyecto (LogicaCollatz) eligiendo la opción de Class Library donde alojaremos la lógica de nuestro proyecto.

View post on imgur.com

View post on imgur.com

  • Añadimos la referencia System.ServiceModel en la zona de referencias que viene por defecto al crear el proyecto, para poder exponer el proyecto como un Servicio WCF.

View post on imgur.com

View post on imgur.com

  • Eliminamos la clase que se genera por defecto.

View post on imgur.com

  • Añadimos una Interface al proyecto(IServicioCollatz) que será el contrato de nuestro servicio WCF.

View post on imgur.com

View post on imgur.com

using System;

using System.Collections.Generic;

using System.Linq;

using System.ServiceModel;

using System.Text;

using System.Threading.Tasks;

 

namespace LogicaCollatz

{

[ServiceContract]

public interface IServicioCollatz

{

[OperationContract]

List<int> GetSecuenciaCollatz(int numero);

}

}

 

  • Hacemos los using correspondientes para que reconozca las decoraciones [ServiceContract] y [OperationContract].

View post on imgur.com

  • Añadimos una nueva clase(ServicioCollatz) que heredara de nuestra interface

View post on imgur.com

  • Herencia

View post on imgur.com

  • Implementamos la interface y completamos el código con el procedimiento para comprobar la conjetura de Collatz

View post on imgur.com

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

 

namespace LogicaCollatz

{

class ServicioCollatz : IServicioCollatz

{

public List<int> GetSecuenciaCollatz(int numero)

{

List<int> secuencia = new List<int>();

secuencia.Add(numero);

while (numero != 1)

{

if (numero % 2 == 0)

{

numero = numero / 2;

}

else

{

numero = numero * 3 + 1;

}

secuencia.Add(numero);

}

return secuencia;

}

}

}

 

 

Una vez que tenemos la lógica, es el momento de crearnos el proyecto para comunicar dicha lógica, que es el Host del servicio.

  • Sobre la solución, agregamos un nuevo proyecto llamado HostCollatz de tipo Aplicación de servicios WCF y lo ponemos como proyecto principal.

View post on imgur.com

View post on imgur.com

  • Añadimos la referencia de nuestra lógica que encontraremos en la sección de proyectos

View post on imgur.com

View post on imgur.com

Una vez que lo tenemos, necesitamos un conector SVC en el proyecto para consumir externamente los métodos del contrato.

  • Agregamos un nuevo objeto Servicio WCF llamado svc.

View post on imgur.com

Eliminamos la clase asociada que nos traerá. (Service1.cs y IService1.svc.cs), y modificamos su código.

View post on imgur.com

<%@ ServiceHost Language=”C#” Debug=”true”

Service=”LogicaCollatz.ServicioCollatz” %>

  • Ahora modificamos el archivo Web.config completamente para exponer nuestro Servicio de lógica.

WEB.CONFIG

<?xml version=”1.0″?>

<configuration>

<system.serviceModel>

<services>

<service name=”LogicaCollatz.ServicioCollatz” behaviorConfiguration=”Comportamiento”>

<endpoint address=”” binding=”basicHttpBinding” contract=”LogicaCollatz.IServicioCollatz”/>

</service>

</services>

<behaviors>

<serviceBehaviors>

<behavior name=”Comportamiento”>

<serviceMetadata httpGetEnabled=”true”/>

</behavior>

</serviceBehaviors>

</behaviors>

</system.serviceModel>

<system.web>

<compilation debug=”true”/>

</system.web>

</configuration>

 

Ponemos el conector SVC como página principal y ejecutamos

 

Nos abrirá el cliente de prueba WCF y podremos comprobar que el servicio es ejecutado correctamente.

View post on imgur.com

  • Finalmente creamos un proyecto MVC sobre la misma solución para consumir nuestro servicio WCF.

View post on imgur.com

View post on imgur.com

  • Añadimos la referencia al servicio que acabamos de crear, que posteriormente alojaremos en Azure

View post on imgur.com

 

Damos al botón de discover para ver de que servicios disponemos.

 

View post on imgur.com

 

  • Crearemos el controlador

View post on imgur.com

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.Mvc;

 

namespace ClienteCollatzMVC.Controllers

{

public class CollatzController : Controller

{

ServicioCollatz.ServicioCollatzClient obj = new ServicioCollatz.ServicioCollatzClient();

 

// GET: Collatz

public ActionResult Index()

{

return View();

}

 

[HttpPost]

public ActionResult Index(int numero)

{

int[] ds = obj.GetSecuenciaCollatz(numero);

//ViewBag.AuthorList = ds.ToList();

return View(ds);

}

 

}

}

  • Añadimos la vista que solo tendrá una caja de texto para introducir el valor y un botón para enviarlo

View post on imgur.com

@model int[]

<h2>Index</h2>

<form method=”post”>

<input type=”text” name=”numero” id=”numero” />

<button type=”submit” id=”btnmostrar”>Mostrar aplicacion de collatz</button>

<ul>

@if (Model != null)

{

foreach (var d in Model)

{

<li>@d</li>

}

}

</ul>

</form>

 

Para consumir el servicio WCF con nuestro cliente MVC debemos lanzar ambos proyectos a la vez lanzando primero el HOST y luego el MVC.

 

 

View post on imgur.com

Para poder acceder a nuestra página  una vez que cargue el servicio introducimos en la barra de direccion /Collatz/Index , que es donde hemos creado nuestra vista. La direccion final seria localhost:XXXXX/Collatz/Index .

View post on imgur.com

Ahora vamos a publicar el servicio en Azure para poder consumirlo directamente.

Para ello entramos al PortalAzure

 

  • En el panel de la izquierda buscamos App services.

View post on imgur.com

  • Buscamos la opción de Aplicación Web.

View post on imgur.com

  • Finalmente completamos los datos requeridos y pulsamos en crear.

View post on imgur.com

 

Volvemos a Visual Studio y publicamos el HOST en la aplicación de servicio que acabamos de crear. Para ello tenemos que tener instalados los SDK de Azure en Visual Studio y habernos logueado con nuestra cuenta de Azure

View post on imgur.com

View post on imgur.com

Ahora ya podemos probar nuestra web app consumiendo el servicio alojado en Azure solo lanzando el proyecto MVC.

 

Creación de un servicio WCF, alojamiento en Azure y consumo MVC

Sergio Gabriel Comparín Imas

Microsoft MCSD Web Applications + SharePoint Apps

Centro tecnológico Tajamar

Año académico: 2016-2017