martes, 29 de marzo de 2022

Logging con Elastic Stack

Con Elastic Stack, tambien conocido como el ELK Stack, se puede tomar de manera confiable y segura datos de cualquier fuente, en cualquier formato, después búscalos, analízalos y visualízalos en tiempo real. Son productos gratuitos y abiertos: Elasticsearch, Logstash y Kibana. También se puede considerar a Beats dentro del conjunto de herramientas.

Logging with Elastic Stack


Serilog
Like many other libraries for .NET, Serilog provides diagnostic logging to files, the console, and elsewhere. It is easy to set up, has a clean API, and is portable between recent .NET platforms.
Unlike other logging libraries, Serilog is built with powerful structured event data in mind.

Beats
Beats es una plataforma gratuita y abierta para agentes de datos con un solo propósito. Envían datos de cientos o miles de máquinas y sistemas a Logstash o Elasticsearch.

Logstash
Logstash es un pipeline de procesamiento de datos gratuito y abierto del lado del servidor que ingesta datos de una multitud de fuentes, los transforma y luego los envía a tu "escondite" favorito

Elasticsearch
Elasticsearch is a powerful search engine that can index logs as they arrive. It makes running queries against the logs quick. Elasticsearch can handle huge quantities of logs and, in extreme cases, can be scaled out across many nodes.

Kibana
Kibana es una interfaz de usuario gratuita y abierta que te permite visualizar los datos de Elasticsearch y navegar en el Elastic Stack. Realiza lo que desees, desde rastrear la carga de búsqueda hasta comprender la forma en que las solicitudes fluyen por tus apps.


Azure DevOps

Connect an on-premises network to a Microsoft Azure virtual network

Connect your on premises network to Azure with VPN Gateway

Connecting On-premises Networks with Azure Virtual Networks




martes, 15 de marzo de 2022

Novedades (a marzo de 2022)

 La siguiente es una lista de temas nuevos (o no tanto) y no tan conocidos aún por nosotros a la fecha y que conviene tenerlos presentes:


What is .NET MAUI?

Sucesor de Xamarin, MAUI es un framework cross-platform (Multi-platform App UI) para crear apps desktop y mobile con C# y XAML.


Duende - IdentityServer (*)
The most flexible and standards-compliant OpenID Connect and OAuth 2.0 framework for ASP.NET Core.


OAuth 2.0, OpenID Connect y JSON Web Tokens (JWT) ¿Que es qué?
El artículo describe para qué es cada cosa y cuando utilizarlos.


ASP.NET Core Identity (*)
- Is an API that supports user interface (UI) login functionality.
- Manages users, passwords, profile data, roles, claims, tokens, email confirmation, and more.
The Microsoft identity platform helps you build applications your users and customers can sign in to using their Microsoft identities or social accounts, and provide authorized access to your own APIs or Microsoft APIs like Microsoft Graph


Microsoft identity platform (NO relacionado con ASP.Net Core Identity)
The Microsoft identity platform for developers is an authentication service, open-source libraries, and application management tools.


NOTA:

(*) Al momento de escribir esta entrada tenemos la siguiente duda: para desarrollar una aplicación web (SPA c/Angular) desde cero seguramente utilizaremos ASP.NET core Identity. Deberíamos además implementar IdentiryServer?

lunes, 7 de marzo de 2022

HTTP Error 500.30 - ANCM In-Process Start Failure al intentar lanzar el debugger (Visual Studio 2019)

 Fix .NET Core HTTP Error 500.30 After Publish to App Service from Visual Studio

En el Log del sistema se genera un error:

Application '/LM/W3SVC/2/ROOT' with physical root 'C:\_sistemas\cesvi_analytics\Analytics_WebApi\Analytics_WebApi.API\' failed to load coreclr

SOLUCION:

Cambiar "InProcess" por "OutOfProcess" en la configuración del Debug:



HttpClient en Asp.Net MVC 5


El inconveniente de utilizar muchas instancias de HttpClient (dentro de un USING) es que finalmente produce errores de tipo "socket exhaustion".

The Problem with using HttpClient as opposed to IHttpClientFactory
The problem associated with using many instance of HttpClient in our app doesn’t come from HttpClient itself. But it comes from HttpMessageHandler and it’s lifetime. When we new up many instances of HttpClient in our app with a using statement, what happen is the HttpClient is disposed of but the socket stays open. This can lead to socket exhaustion problem, you can read more about this issue here.

Using IHttpClientFactory with Asp.Net MVC 5

Para solucionar esto en Asp.Net Core se puede utilizar HttpClientFactory

Pero como HttpClientFactory fue inicialmente desarrollado para .Net Core, su implementación en el .Net Framework se torna difícil y optamos por simplemente utilizar un objeto HttpClient estático, como mensiona aquí: YOU'RE USING HTTPCLIENT WRONG AND IT IS DESTABILIZING YOUR SOFTWARE

Pero la implementación con el HttpClient estático (Singleton) tiene problemas en un escenario de balenceo de cargaSingleton HttpClient doesn't respect DNS changes

Singleton HttpClient? Beware of this serious behaviour and how to fix it.


CONCLUSIÓN:

No es recomendable utilizar múltiples instancias de HttpClient en Asp.Net por el problema de socket exhaustion. Lo ideal es implementar IHttpClientFactory, pero como fue desarrollado para .Net Core  su implementación en nuestro sistema ASP.Net MVC 5 no es viable (Dependency Injection).
Una solución de compromiso sería utilizar HttpClient estático pero el sistema no quedaría apto para balanceo de carga.
La solución óptima sería entonces crear un nuevo proyecto .Net Core con microservicios para resolver las llamadas a APIs externas.