Azure WCF Service Web Role
Servicios 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?
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
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
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.
Ahora seleccionamos el rol de “WCF Service Web Role”, y le damos a Ok.
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».
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.
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.
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.
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.
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.
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.
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.
Por último aceptamos y ya se nos habrá cargado nuestro servicio WCF y comprobamos que podemos acceder a nuestro servicio Fibonacci.
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).
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.
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.
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.
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.
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