martes, 17 de diciembre de 2019

Este post es parte del segundo calendario de adviento de C# en español.
Días atrás veíamos lo sencillo que resultaba crear un servicio gRPC que hacía uso de streaming unidireccional de mensajes, en sentido servidor-cliente. Como recordaréis, en este post implementábamos un servicio generador de números al que los clientes podrían conectarse para recibir una secuencia de enteros a intervalos periódicos.

Hoy vamos a complicar algo el escenario, pues veremos una opción aún más potente: la creación de streaming bidireccional, es decir, cómo cliente y servidor pueden enviar mensajes al lado opuesto de forma asíncrona, una vez establecida la comunicación entre ambos.
Para ello, implementaremos un sencillo juego, con las siguientes funcionalidades:
- El lado cliente, una aplicación de consola, abrirá una conexión con el servicio. En ese momento, el servidor elegirá un número al azar (1-100) y lanzará un mensaje de bienvenida, que deberá ser mostrado en el lado cliente.
- Desde el lado cliente solicitaremos al usuario un número entero, que enviaremos al servidor por el stream ascendente.
- El servidor recibirá el número y lo comparará con el que tiene almacenado, enviando por el canal descendente el resultado de la comparación.
- El proceso finalizará cuando el número sea encontrado.
Publicado por José M. Aguilar a las 8:05 a. m.
Nadie ha comentado la entrada, ¿quieres ser el primero?
Etiquetas: aspnetcore, grpc, streaming
lunes, 16 de diciembre de 2019
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- 101 citas célebres más del mundo de la informática (¡505 ya!)
José María Aguilar - Antipatrones de asincronía en C#
José María Aguilar
.NET Core / .NET
- Runtime Host Configuration Options and AppContext data in .NET Core
Filip Woj - Thread-safe observable collection in .NET
Gérald Barré - GC Perf Infrastructure – Part 1
Maoni Stephens - C# 9
Bassam Alugili - Discriminated Unions in C# — An Unexceptional Love Story
Zhengbo Li - Setting assembly and nuget package metadata in .NET Core
Cezary Piątek - Useful ClaimsPrincipal extension methods I use in my projects
Jerrie Pelser - .NET Core, Docker, and Cultures - Solving a culture issue porting a .NET Core app from Windows to Linux
Andrew Lock - Fun with URL Encodings
Phil Haack - C# Channels - Timeout and Cancellation
Denis Kyashif - ConfigureAwait FAQ
Stephen Toub - Regex Performance With and Without RegexOptions.Compiled Using .NET Framework 4.8 and .NET Core 3.1 (December 2019)
Ken Dale - An Introduction to System.Threading.Channels
Stephen Toub - Demystifying the new .NET Core 3 Worker Service
Randy Patterson - Serialización/Deserialización Json omitiendo "JsonProperty" Name (o no)!
Juan Luis Guerrero
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.
martes, 10 de diciembre de 2019
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

Pero comencemos desde el principio...
lunes, 2 de diciembre de 2019
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