miércoles, 11 de diciembre de 2019
Este post es parte del segundo calendario de adviento de C# en español.
Hace bien poco hablábamos de la introducción en .NET/C# de la interfaz
IAsyncEnumerable
, y de las interesantes posibilidades que abría vistas a la producción y consumo de streams de mensajes.También hace unos días dimos un repaso al soporte para la implementación de clientes y servidores gRPC lanzado con ASP.NET Core 3. En dicho post hacíamos una pequeña introducción al desarrollo de este tipo de servicios, basados en HTTP/2 y el estándar protobuf.
Como ya comentábamos entonces, a diferencia de los tradicionales servicios tipo REST (HTTP/JSON), gRPC soporta el intercambio de datos en modo streaming, tanto unidireccional como bidireccionalmente. Es decir, en el escenario más complejo podríamos abrir un canal gRPC a través del cual un cliente podría ir enviando paquetes de información de forma asíncrona, y al mismo tiempo utilizarlo para recibir un flujo de datos continuo desde el servidor.
Hoy vamos a ver cómo se combinan estas características viendo un ejemplo de implementación de un servicio gRPC que utiliza streaming unidireccional, en sentido servidor-cliente.
Para ello crearemos un servicio generador de números en streaming que funcionará de la siguiente forma:
- Los clientes invocarán un procedimiento del servidor suministrándole un número entero inicial y un delay expresado en segundos.
- Como respuesta, el servidor creará un stream por el que irá enviando, según la periodicidad indicada, números consecutivos partiendo del especificado en la llamada inicial.
- El proceso finalizará, cerrando en stream, cuando el servidor haya generado 10 números, o bien cuando el cliente sea detenido.
Publicado por José M. Aguilar a las 8:05 a. m.
Hay
4 comentarios, ¡participa tú también!
Etiquetas: aspnetcore, grpc, streaming
martes, 10 de diciembre de 2019
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Interpolación de cadenas en C# 6
José María Aguilar - ¿Se pueden asociar varias interfaces a la misma instancia en el contenedor de servicios de ASP.NET Core?
José María Aguilar
.NET Core / .NET
- Announcing .NET Core 3.1
Richard Lander - .NET Core 2.2 will reach End of Life on December 23, 2019
Lee Coward - Updates to .NET Core Windows Forms designer in Visual Studio 16.5 Preview 1
Olia Gavrysh - C# - la palabra clave volatile
Juan Carlos Ruiz Pacheco - “Equals” and “==” are not… equal
João Antunes - Check for spammy email addresses when registering users
Jerrie Pelser - Novedades de C# 8: Índices y Rangos
Jorge Turrado - Exploring borrowed annotations in C#
Jared Parsons - How to simulate AutoMapper that works during the build time
Cezary Piątek - IAsyncEnumerable<T> Is Your Friend, Even In .NET Core 2.x
Brant Burnett - Declaring InternalsVisibleTo in the csproj
Gérald Barré - Remote Debugging a .NET Core Linux app in WSL2 from Visual Studio on Windows
Scott Hanselman - Novedades de C# 8: Índices y Rangos
Jorge Turrado - Controla la calidad de tu código con NDepend
Albert Capdevila
martes, 3 de diciembre de 2019
Hace poco estaba revisando un proyecto y me topé con un problema derivado de un uso extraño de los expression bodied members, y creo que es interesante comentarlo porque, aunque probablemente la mayoría no os vayáis a encontrar con esto, seguro que puede venir bien a alguien que no tenga del todo claro cómo y cuándo se debe utilizar esta sintaxis.
Pero comencemos desde el principio...
Pero comencemos desde el principio...
lunes, 2 de diciembre de 2019
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Inicialización de diccionarios en C# 6
José María Aguilar - Publicando nuestra web sobre Azure Web Apps
Jorge Turrado
.NET Core / .NET
- TimeSpan configuration values in .NET Core
Mark Seemann - Bootstrap a .NET Core development environment for Linux
Jim Burger - Properly Comparing Strings with Globalization and Performance in .NET
David McCarter - How to Build Analyzers and Code Fixes by Roslyn using VS2019
Ashutosh Gpt - Embracing nullable reference types
Mads Torgersen - Task Parallel Library 101 Using C#
Jin Vincent Necesario - ElectronCGI - A solution to cross-platform GUIs for .Net Core
Rui Figueiredo
martes, 26 de noviembre de 2019
Hace ya algún tiempo nos preguntábamos que dónde había ido a parar la directiva @helper de Razor en ASP.NET Core, y la respuesta era simple: había desaparecido.
Como recordaréis, esta directiva era bastante útil para simplificar el código de las vistas y mejorar su legibilidad, pues permitía crear funciones reutilizables que mezclaban HTML y código de servidor, como en el siguiente ejemplo:
Aunque quizás más bien habría que hablar de reencarnación...
Como recordaréis, esta directiva era bastante útil para simplificar el código de las vistas y mejorar su legibilidad, pues permitía crear funciones reutilizables que mezclaban HTML y código de servidor, como en el siguiente ejemplo:
@* File: Test.cshtml *
@Multiplication(2)
@Multiplication(3)
@helper Multiplication(int x)
{
<h2>Multiplication table of @x</h2>
<ul>
@for (var i = 1; i <= 10; i++)
{
<li>@x * @i = @(x * i)</li>
}
</ul>
}
Hasta la versión 2.2, teníamos que conformarnos con apaños como los descritos en aquél post si queríamos emular lo que llevábamos tantos años utilizando con MVC 5 y anteriores. Y también entonces comentamos que había ciertas posibilidades de que en algún momento volviera a la vida, y éstas se han materializado, por fin, en ASP.NET Core 3.0.Aunque quizás más bien habría que hablar de reencarnación...
lunes, 25 de noviembre de 2019
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Rendimiento de nameof en C# 6
José María Aguilar - Si las shadow properties no existen como propiedades en la entidad, ¿cómo podemos inicializarlas en el seed de Entity Framework Core?
José María Aguilar
.NET Core / .NET
- Meet WebWindow, a cross-platform webview library for .NET Core
Steve Sanderson - Easy unit testing of null argument validation (C# 8 edition)
Thomas Levesque - Augmenting the .NET Core 3.0 Generic Host
Ian Bebbington - Fire and forget a Task in .NET
Gérald Barré - Using foreach with index in C#
Thomas Levesque - HttpClient Connection Pooling in .NET Core
Steve Gordon - Using async disposable and async enumerable in frameworks older than .NET Core 3.0
Filip Woj - Using proper culture with C# string interpolation
Martin Zikmund - TaskMonitor: Free Yourself From async void and MOAR
Jean-Marie Alfonsi - Recommended Asynchronous Pattern in .NET
Damir Arh - Novedades de C# 8: Pattern Matching
Jorge Turrado