lunes, 23 de octubre de 2017
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
.NET / .NET Core
- Announcing the .NET Framework 4.7.1
Preeti Krishna - DotNetAnywhere: An Alternative .NET Runtime
Matt Warren - The Ultimate .NET Experiment – open source project
Konrad Kokosa - Dissecting the pattern matching in C# 7
Sergey Teplyakov - Historia del lenguaje C#: pasado, presente y evolución
Erik Dietrich (traducido por CampusMVP) - Forgotten .NET Gem — StringDictionary
James M. Curran - .NET Standard Selector
Immo Landwerth - RyuJIT Just-in-Time Compiler Optimization Enhancements
Joseph Tremoulet - C# 7.2 New Features With Visual Studio 2017
Banketeshvar Narayan - .Net Core Dependency Injection
Jared Nance - An Elasticsearch Tutorial for .NET Developers
Ivan Cesar - Running tests with dotnet xunit using Cake
Andrew Lock - Create a .NET Core 2 application on Linux with Visual Studio Code
Benjamin Perkins - Lambdas and Local Functions
Andy Gocke - Free .NET Core eBook, including ASP.NET Core and EF Core
Andrew Lock
Publicado por José M. Aguilar a las 8:55 a. m.
Nadie ha comentado la entrada, ¿quieres ser el primero?
Etiquetas: enlaces
martes, 17 de octubre de 2017
Puedes encontrar una versión actualizada de este post, que describe una forma mejor de hacerlo:
https://www.variablenotfound.com/2018/05/implementando-mas-facilmente-background.html
https://www.variablenotfound.com/2018/05/implementando-mas-facilmente-background.html
Es relativamente frecuente encontrar aplicaciones en las que necesitamos disponer de un proceso en background ejecutándose de forma continua. Hace poco hablábamos de IApplicationLifetime, un servicio del framework que nos permitía introducir código personalizado al iniciar y detener las aplicaciones, y probablemente habréis pensado que éste sería un buen sitio para gestionar el inicio y finalización de estas tareas en segundo plano.
Y aunque es posible, ASP.NET Core proporciona otras fórmulas más apropiadas para conseguirlo: los hosted services. Mediante este mecanismo, podemos crear servicios que serán gestionados por el host, y que serán iniciados y finalizados automáticamente junto con la aplicación.
lunes, 16 de octubre de 2017
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
.NET / .NET Core
- How to create a self contained .Net core application?
Anuraj Parameswaran - Introducing Oakton — Command line parsing minus the usual cruft
Jeremy Miller - Let in LinQ
Juan Francisco Morales Larios - .NET Flux Toolkit Nuget Announcement
Alex Dunn - Speech Recognition in Mono and .NET C#
Dave Mathews - What do C# values look like in WinDbg
Benjamin Perkins - Avoiding the NullReferenceException
Derek Comartin - Hide Compiler Warnings in Your Spare Time
Tim Patrick
martes, 10 de octubre de 2017
Imaginad una aplicación ASP.NET Core MVC en la que insertamos un enlace o botón que dirige el navegador hacia la siguiente acción, que realiza una operación compleja y retorna un resultado:
seres poseídos por una entidad demoníaca impacientes, lo normal es que se lancen en un feroz ataque contra el sistema, refrescando la página o pulsando repetidamente el botón de envío como si no hubiera un mañana. Todos hemos escuchado y sufrido en nuestras carnes una agresión de este tipo: “espera, esto parece que no va: click-click-click-click-click-click-click…”
Obviamente, esto no hace sino empeorar las cosas. El servidor, que ya estaba ocupado intentando responder la primera petición, no tiene ya que atender a una, sino a todas las que se han generado tras este ataque, cuando en realidad no tiene sentido: para tranquilizar al usuario basta con entregarle el resultado de una de ellas, por lo que todos los hilos sobrantes simplemente están malgastando recursos del servidor realizando operaciones para obtener resultados que nadie va a consumir.
Estaría bien poder cancelar esas peticiones largas si tenemos la seguridad de que ningún cliente está esperándolas, ¿verdad?
public async Task<IActionResult> GetTheAnswerToLifeUniverseAndEverything()
{
await Task.Delay(30000); // Simulando un proceso costoso...
return Content("42!");
}
Cuando nuestros usuarios pulsen dicho botón, necesariamente habrán de esperar varios segundos para obtener una respuesta. Pero como suelen ser Obviamente, esto no hace sino empeorar las cosas. El servidor, que ya estaba ocupado intentando responder la primera petición, no tiene ya que atender a una, sino a todas las que se han generado tras este ataque, cuando en realidad no tiene sentido: para tranquilizar al usuario basta con entregarle el resultado de una de ellas, por lo que todos los hilos sobrantes simplemente están malgastando recursos del servidor realizando operaciones para obtener resultados que nadie va a consumir.
Estaría bien poder cancelar esas peticiones largas si tenemos la seguridad de que ningún cliente está esperándolas, ¿verdad?
lunes, 9 de octubre de 2017
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
.NET / .NET Core
- Swashbuckle con ASP.NET Core y AAD B2C
Eduard Tomás - Roslyn Primer – Part I: Anatomy of a Compiler
Anthony D. Green - Dissecting the local functions in C# 7
Sergey Teplyakov - User Interface Unit Tests with .NET Core
Ricardo Peres - C# 7 Series, Part 5: Private Protected
Mark Zhou
martes, 3 de octubre de 2017
Al dar el salto a una nueva tecnología como ASP.NET Core, en muchas ocasiones nos encontramos con el problema de no saber cómo hacer cosas que con las tecnologías tradicionales teníamos completamente controladas. Ya hemos comentado por aquí varios casos (como el Application_Start(), los custom errors o las variables de sesión) y hemos visto cómo se mapean estas funciones al nuevo framework, pero hay muchos más.
Otro ejemplo muy habitual lo encontramos con
Otro ejemplo muy habitual lo encontramos con
MapPath()
, un método perteneciente a la clase HttpServerUtility
de ASP.NET "clásico" que utilizábamos para obtener una ruta física a partir de la ruta virtual o relativa de un recurso. Por ejemplo, en el siguiente código mostramos cómo averiguar la ruta en disco de una imagen utilizando este método:var path = HttpContext.Current.Server.MapPath("~/images/image.jpg"); // path = C:\inetpub\wwwroot\mysite\images\image.jpgPues bien, ni en ASP.NET Core ni en MVC tenemos disponible la clase
System.Web.HttpContext
, ni por tanto una propiedad Server
de tipo HttpServerUtility
que usábamos para invocar al método MapPath()
. Sin embargo, disponemos de herramientas alternativas que nos permiten conseguir lo mismo, aunque, eso sí, de forma algo menos directa.