martes, 28 de abril de 2020
Hoy va un truquillo rápido sobre Blazor que puede resultar útil en muchos escenarios. Como probablemente sepáis, al igual que ocurre con otras tecnologías, Blazor codifica la salida HTML por motivos de seguridad, de forma que cualquier contenido con código de marcado será mostrado por defecto tal cual, sin interpretar las etiquetas.
Por ejemplo, considerad el siguiente código en un componente Blazor:
Por ejemplo, considerad el siguiente código en un componente Blazor:
<p>This text is encoded: @myHtml</p>
@code {
string myHtml = "Hello, <b>this is bold</b>";
}
El resultado que enviaremos al navegador es el siguiente:<p>This text is encoded: Hello, <b>this is bold</b></p>
Y, por tanto, nuestros usuarios podrán leer literalmente este párrafo:This text is encoded: Hello, <b>this is bold</b>
Normalmente no es eso lo que queremos mostrarles, ¿verdad?
lunes, 27 de abril de 2020
Aunque seguimos en el túnel, parece que tímidamente está apareciendo un poco de luz en la lejanía. Y mientras la cosa se ilumina del todo, quizás os entretengan un rato los enlaces recopilados durante la semana pasada, que, como de costumbre, espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Switch expressions en C# 8
José María Aguilar - Confluencia de ramas en el pipeline de ASP.NET Core
José María Aguilar
.NET Core / .NET
- Como leer programáticamente contadores de rendimiento en .Net Core
Jorge Turrado - Announcing .NET 5.0 Preview 3
Richard Lander - Unit bias against collections
Mark Seemann - The Most Exciting Promise of .NET 5
Heather Downing - Enjoy Local Development with Tye, Docker, and .NET
Khalid Abuhakmeh - Building End-to-End Diagnostics and Tracing: Diagnostic Events
Jimmy Bogard - Nullable Reference Types: Migrating a Codebase – A Look at New Language Features in C# 8
Matthias Koch - Introducing Jasper as an In Process Command Bus for .Net
Jeremy D. Miller - C# 9 – Positional or Nominal Creation
Christian Nagel - Creating and Packaging a .NET Standard library
Sayed Hashimi - Verify User File Uploads With .NET
Khalid Abuhakmeh - Demystifying Memory Profilers in C# .NET Part 1: The Principles
Michael Shpilt - Referencing a Specific Assembly from a NuGet Package
Maarten Balliauw - Finalization Queue Tips
Mark Downie - .NET Core Tab Completion With Zsh
Khalid Abuhakmeh
martes, 21 de abril de 2020
Es lógico pensar que muchas de las aplicaciones que construyamos con Blazor, sobre todo en el mundo empresarial, necesitarán acceder a bases de datos para obtener o almacenar información.
En caso de utilizar Blazor WebAssembly, ese acceso encajará conceptualmente con lo que venimos haciendo desde hace años al construir aplicaciones SPA: desde el lado cliente simplemente llamaremos a una API o endpoint que actuará como pasarela, por lo que todo el código de acceso a datos se encontrará en el servidor. Aunque existen algunas iniciativas para posibilitar que EF Core funcione directamente en el navegador con algunos proveedores, ciertamente no será el escenario habitual.
Sin embargo, si utilizamos Blazor Server, tendremos la sensación inicial de que es todo más sencillo. El código de eventos bindeados a la interfaz se ejecuta en servidor, por lo que a priori sólo tendríamos que replicar lo que solemos hacer con servicios o controladores: solicitar una instancia del contexto de datos al inyector de dependencias, y utilizarla para lograr nuestros propósitos.
Pero no, la cosa es algo más complicada que eso. De hecho, los que ya estéis creando aplicaciones Blazor Server con EF Core seguro que os habéis topado en algún momento con un error como el siguiente:
¿Por qué ocurre esto?
En caso de utilizar Blazor WebAssembly, ese acceso encajará conceptualmente con lo que venimos haciendo desde hace años al construir aplicaciones SPA: desde el lado cliente simplemente llamaremos a una API o endpoint que actuará como pasarela, por lo que todo el código de acceso a datos se encontrará en el servidor. Aunque existen algunas iniciativas para posibilitar que EF Core funcione directamente en el navegador con algunos proveedores, ciertamente no será el escenario habitual.
Sin embargo, si utilizamos Blazor Server, tendremos la sensación inicial de que es todo más sencillo. El código de eventos bindeados a la interfaz se ejecuta en servidor, por lo que a priori sólo tendríamos que replicar lo que solemos hacer con servicios o controladores: solicitar una instancia del contexto de datos al inyector de dependencias, y utilizarla para lograr nuestros propósitos.
Pero no, la cosa es algo más complicada que eso. De hecho, los que ya estéis creando aplicaciones Blazor Server con EF Core seguro que os habéis topado en algún momento con un error como el siguiente:
InvalidOperationException: A second operation started on this context before a previous operation
completed. This is usually caused by different threads using the same instance of DbContext. For
more information on how to avoid threading issues with DbContext, see
https://go.microsoft.com/fwlink/?linkid=2097913.
Esta excepción se debe a que existen dos hilos de ejecución utilizando la misma instancia del contexto de datos al mismo tiempo, algo que Entity Framework no permite. Esto ocurrirá, por ejemplo, si tenéis en la misma página varios componentes que de forma concurrente intentan acceder a la base de datos al inicializarse.¿Por qué ocurre esto?
lunes, 20 de abril de 2020
Pues recién cumplidos los diez años desde que comencé a publicar enlaces de interés todas las semanas, vamos ahora a por la entrega número 400. Como siempre, espero que os resulten interesantes y os ayuden a llevar mejor estos días :)
Por si te lo perdiste...
- Novedades en la compilación de vistas en ASP.NET Core 3.0, ¡otra vez!
José María Aguilar - Ramificar el pipeline de ASP.NET Core con Map() y MapWhen()
José María Aguilar
.NET Core / .NET
- Work flow of diagnosing memory performance issues – Part 1
Maoni Stephens - Pretty Method Display in xUnit.net
Jason Roberts - Using .NET Core to provide Power Query for Excel on Mac
Oded Hanson - A Framework to DotNet Core Conversion Report
Mike Hadlow - C# 8.0 nullable references: non-nullable is the new default
Ian Griffiths - Serilog Logging Best Practices
Ben Foster - C# 8, A Year Late
Dave Brock - .NET JIT compiler is not type safe
Konrad Kokosa - A little riddle with AsyncLocal
Nelson Parente - 7 ways to improve code quality in C# using option type
Ahmed Fouad
martes, 14 de abril de 2020
Es increíble lo rápido que pasa el tiempo: aunque parezca que fue ayer, hace ya diez años que comencé a publicar enlaces interesantes en el blog, iniciando la serie con el post Enlaces interesantes 1... y en estos momentos estoy preparando la entrega semanal número 400 :)
Y para celebrarlo, he pensado que estaría bien hacer un recopilatorio de preguntas y curiosidades que los fieles seguidores de esta serie me habéis ido haciendo llegar, tanto en persona como a través de redes sociales o mails, a lo largo de estos años.
Y para celebrarlo, he pensado que estaría bien hacer un recopilatorio de preguntas y curiosidades que los fieles seguidores de esta serie me habéis ido haciendo llegar, tanto en persona como a través de redes sociales o mails, a lo largo de estos años.
Publicado por José M. Aguilar a las 8:05 a. m.
Etiquetas: autobombo, blogging, curiosidades, enlaces
lunes, 13 de abril de 2020
Una semana más de confinamiento, pero una semana menos para que esta pesadilla termine. Y mientras tanto, sigamos compartiendo enlaces que, como de costumbre, espero que os resulten interesantes :)
Por si te lo perdiste...
- Implementación por defecto en interfaces de C#8, un primer vistazo
José María Aguilar - Archivos estáticos en aplicaciones ASP.NET Core (II)
José María Aguilar
.NET Core / .NET
- Contadores de rendimiento multiplataforma en .Net Core
Jorge Turrado - Resolviendo problemas con repositorios de paquetes NuGet a la hora de instalar Templates de proyectos en .NET Core
Jorge Serrano - .NET 5.0, VS2019 Preview and C# 9.0 for ASP .NET Core developers
Shahed Chowdhuri - Work flow of diagnosing memory performance issues – Part 0
Maoni Stephens - Mobius – .NET runtime running on .NET Core
Konrad Kokosa - Depending on the right PowerShell NuGet package in your .NET project
Robert Holt - Building End-to-End Diagnostics and Tracing: Trace Context
Jimmy Bogard - Move OData to .NET 5
Sam Xu - Memory Cache in C#
Jaimin Shethiya - Check Certificate Expiry Date in .NET Core
Steve Fenton - How are .NET APIs Designed?
Steve Gordon - Strangling .NET Framework App to .NET Core
Kamil Grzybek - HttpClient - Error handling, a test driven approach
Josef - Simplifying Parameter Null and Other Checks with the Pitcher Library
Jason Roberts - Queuing Background Jobs with Coravel
Derek Comartin - Using Oakton for Development-Time Commands in .Net Core Applications
Jeremy D. Miller - Building your First async fluent API using interface extension methods pattern
Ahmed Fouad
lunes, 6 de abril de 2020
Dado que la recopilación de enlaces ha sido considerada una actividad esencial, no se ha visto afectada por el parón decretado recientemente, así que ahí va la cosecha de la semana pasada :)
Como siempre, espero que os resulten interesantes y os ayuden a llevar mejor el confinamiento. ¡Que paséis una buena Semana Santa!
Como siempre, espero que os resulten interesantes y os ayuden a llevar mejor el confinamiento. ¡Que paséis una buena Semana Santa!
Por si te lo perdiste...
- Tipos referencia anulables en C# 8
José María Aguilar - Archivos estáticos en aplicaciones ASP.NET Core (I)
José María Aguilar
.NET Core / .NET
- Announcing .NET 5.0 Preview 2
Richard Lander - .NET 5 preview support in OmniSharp and C# Extension for VS Code
Filip Woj - What Are .NET Worker Services?
Steve Gordon - Sending and Receiving JSON using HttpClient with System.Net.Http.Json
Steve Gordon - C# Functional Programming In-Depth (12) Immutability, Anonymous Type, and Tuple
Dixin Yan - Inject JsonSerializerOptions so Don't Repeat Yourself
Adam Storr - NLog Tutorial - The essential guide for logging from C#
Thomas Ardal - Writing .NET Database Integration Tests
Khalid Abuhakmeh - Can .NET Core Framework Assemblies be Mapped back to Individual NuGet Packages? A Detective Story
Maarten Balliauw - Regex Performance Improvements in .NET 5
Stephen Toub - Build a Windows Worker Service Using .NET Core 3.1 for Removing Old Files in Folders
Fredrik Rudberg