Creación de un servicio WCF
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.
- 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.
- Eliminamos la clase que se genera por defecto.
- Añadimos una Interface al proyecto(IServicioCollatz) que será el contrato de nuestro servicio WCF.
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].
- Añadimos una nueva clase(ServicioCollatz) que heredara de nuestra interface
- Herencia
- Implementamos la interface y completamos el código con el procedimiento para comprobar la conjetura de Collatz
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.
- Añadimos la referencia de nuestra lógica que encontraremos en la sección de proyectos
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.
Eliminamos la clase asociada que nos traerá. (Service1.cs y IService1.svc.cs), y modificamos su código.
<%@ 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.
- Finalmente creamos un proyecto MVC sobre la misma solución para consumir nuestro servicio WCF.
- Añadimos la referencia al servicio que acabamos de crear, que posteriormente alojaremos en Azure
Damos al botón de discover para ver de que servicios disponemos.
- Crearemos el controlador
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
@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.
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 .
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.
- Buscamos la opción de Aplicación Web.
- Finalmente completamos los datos requeridos y pulsamos en crear.
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
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