Un blog con consejos y sugerencias sobre programación en Csharp que he aprendido a lo largo de los años

miércoles, 23 de febrero de 2022

framework para acceso a base de datos seguro y eficiente

febrero 23, 2022 Posted by Uriel Martínez No comments

Una forma fácil, eficiente y segura de hacer consultas y acciones en base de datos


El día de hoy les traigo esta entrada explicando una alternativa muy eficiente de hacer tus consultas a base de datos, este "framework" no he utilizado durante mucho tiempo y jamás he tenido problemas, es muy eficiente, rápido y seguro.

Como primer paso, debemos crear nuestra clase que contendré la información de respuesta o confirmación de acción:


Será la responsable de informarnos de cualquier evento y/o presentarnos la información correspondiente a nuestra consulta.

Ahora crearemos la clase principal donde tendrá 2 funciones, la primera recibirá la consulta en bruto; es decir, en un string junto con la cadena de conexión:


Y la segunda función será la que tenga acceso por store procedure, con esta forma garantizamos que la estructura de nuestro proyecto no sea afectado por algún cambio en la consulta y manejamos toda la lógica del lado de la base de datos:


Como  se puede observar un simple cambio en la recepción de parámetros  y la especificación de realizar la consulta por store procedure, nos da un potencial gigantesco de poder realizar cualquier movimiento en base sin afectar nuestro sistema, donde siempre tendremos los datos en un DataSet y la comprobación  de errores  en el parámetro Error de nuestra clase de respuesta


Espero sea de utilidad para tus proyectos y si tienes duda estaré al pendiente.

Saludos



viernes, 18 de febrero de 2022

TimeOut con sockets asincronos

febrero 18, 2022 Posted by Uriel Martínez , , No comments

TimeOut con sockets asíncronos


Tener un time out (tiempo espera) dentro de un proceso asíncrono con sockets puede ser un dolor de cabeza pero con un poco de ingenio y paciencia te enseño una forma efectiva de hacerlo.

Recuerda seguirme en mis redes sociales para más TIPS de programación
TimeOut Socket Async


Espero te haya servido y si tienes alguna duda con gusto trataré de ayudarte.

Saludos

Leer un archivo de configuración exclusivo por DLL

febrero 18, 2022 Posted by Uriel Martínez , No comments

Leer  un archivo de configuración  exclusivo por DLL 

Si como a mi, te ha pasado que haz tenido que leer la configuración de un archivo .config exclusivo de tu DLL e independiente del sistema. He aquí como se hace:


Es algo muy sencillo pero muy poderoso si deseamos tener un archivo de configuración independiente para cada DLL que utilicemos.


Espero te ayude y comenta si tienes dudas

jueves, 17 de febrero de 2022

Escribe una entrada de log con toda la información relevante en un sencillo paso

febrero 17, 2022 Posted by Uriel Martínez No comments

No te canses escribiendo en LOG

Muchas veces requerimos escribir en un log para saber lo que sucede en nuestro sistema; ejemplo, en qué línea falló, el nombre de la función, la clase, el módulo, Etc.

Y sí te digo que existe una forma de hacerlo rápida, sencilla y que te ahorrará mucho tiempo en tú código?

Con la siguiente función obtendremos toda la información relevante de nuestro evento. 


¿Cómo  funciona?

Fácil, utilizamos la REFLECTION  en NET, que es la técnica que en tiempo de ejecución que podemos usar para crear dinámicamente una instancia de un tipo, vincular el tipo a un objeto existente u obtener el tipo de un objeto existente e invocar sus métodos o acceder a sus campos y propiedades. Si estás utilizando atributos en tu código, la reflexión le permite acceder a ellos como es este caso.


Por último debemos utilizar nuestra nueva función fácil y rápido


Un ejemplo de log sería:

C:\Users\XXX\Documents\Github\XXX\CapaNegocio\Operaciones.cs. 1492. CapaNegocio.Operaciones.ExisteCliente. No hay resultados con la operación

Es todo!!!

Espero te sea de ayuda y gracias por visitar mi blog

lunes, 14 de febrero de 2022

El proceso básico de un servidor de sockets asíncrono

febrero 14, 2022 Posted by Uriel Martínez No comments

 El proceso básico de un servidor de sockets asíncrono en .NET


A continuación explico la estructura y proceso de cómo funciona un servidor de sockets asíncrono. Es importante mencionar que este tipo de estructura funciona para decenas de transacciones pero en caso de ser necesario manejar miles de transacciones es necesario utilizar otro esquema

Lo primero que debemos saber es que para utilizar sockets requerimos el espacio de nombres System.Net.Sockets

y el segundo paso es crear nuestro punto de entrada, que para nuestro caso es una IP y puerto, para ello se usaremos la clase IPEndPoint


Posterior creamos nuestro socket de trabajo principal como un objeto global para posterior instanciarlo, será el encargado de recibir todas las peticiones de nuestro servidor:



Lo  verdaderamente importante viene a continuación.  El recibir una transacción no debería ser problema, ya que solo se utiliza la función receive del socket pero esto es síncrono, lo que significa que hasta que no libere el socket principal, no podrá seguir recibiendo transacciones, por lo tanto, tendremos que apoyarnos de los métodos BeginXXX(), estos métodos tiene algo especial, una referencia a una función llamada CallBack o de retorno que se ejecuta cuando la operación esté por concluirse, lo que nos permite continuar con otro proceso mientras se espera al evento que dispara a esa función, . Iniciemos con  el proceso de aceptación de conexión y copiaremos el objeto de socket principal para que de esta manera nuestro socket pueda continuar recibiendo sin tener que esperar a que terminemos:



Ahora continuamos con el proceso de recepción de información, para ello nos apoyamos de BeginReceive.


De la misma forma que el método de aceptación necesitamos nuestra función CallBack, que en este caso se llama ReadCallback, que lo que hará será procesar la información recibida y se ejecutará cuando el socket detecte que hay transferencia de dicha información


Por último, la función que se utiliza para la respuesta, Send() que de la misma forma utiliza los métodos asíncronos BeginSend:


LISTO, ya tenemos un servidor básico que recibe transacciones y las procesa sin problemas.
Espero haya sido de ayuda, recuerden que este tipo de servidor va muy bien para decenas de transacciones y conexiones simultaneas pero si su necesidad es aceptar miles de conexiones el proceso es distinto, comenten si les sirvió y estoy a sus órdenes.


Saludos!!







jueves, 10 de febrero de 2022

Nuevo paquete Nuget para enviar un correo con cuerpo HTML

febrero 10, 2022 Posted by Uriel Martínez , No comments

 Paquete Nuget para enviar un correo con cuerpo HTML


Me da mucho gusto que mis compilados sean tan aceptados por la comunidad!!!

Por ese motivo he actualizado a la versión 4.7.2 de framework NET para ser compatible con más sistemas.

NOTA: La versión anterior está obsoleta pero aún disponible



Comenten si desean que coloque un tutorial para la creación de paquetes Nuget con NET Framework

miércoles, 9 de febrero de 2022

EventLogTraceListener, la forma más fácil de escribir log en el visor de sucesos de Windows

febrero 09, 2022 Posted by Uriel Martínez , , No comments

 Utiliza el Visor de eventos de Windows como es debido en tus aplicaciones


Existen muchas formas de escribir un LOG  utilizando el visor de eventos de Windows, pero sabes que existe ya una forma correcta y probada de hacerlo sin tener problemas de escritura, encolamiento o bajo rendimiento?

.NET ya tiene una clase y proceso que lo simplifica por ti. Aquí te muestro cómo hacerlo:

1.- Te presento EventLogTraceListener. Para tenerlo disponible en todo tu proyecto puede utilizar la bondad de una clase estática e instanciamos nuestro objeto de la siguiente forma:

2.- El paso que sigue es inicializarlo, para eso utilizamos una función también estática que se podrá usar solo una vez en LOAD de tu programa, ahí usaremos la clase que hace TODA la magia llamada Trace que se encuentra en el namespace System.Diagnostics


3.- De  esta forma tenemos todo listo para poder escribir en el visor de sucesos, lo único que nos hace falta es una pequeña función que solicite lo que se va a escribir


Obviamente necesitamos nuestro enumerado LogType para saber si es informativo, alerta o error



ES TODO!, ahora lo único que debemos hacer es llama a nuestra funcion Log y escribir desde cualquier parte de nuestro sistema  

Recuerda que no es necesario querer inventar siempre las cosas, existen ya muchas funciones que hacen lo que deseas solo hay que buscar un poco.


 

6 formas de iniciar una TASK en .NET

febrero 09, 2022 Posted by Uriel Martínez No comments

6 formas de iniciar una TASK en .NET 


Existen varias formas de usar TASKS en .NET, todas son correctas así como cada forma de pensar y solucionar un problema. Aquí 6 de las formas más comunes

PD. Disculpe el titulo de la imagen, error de dedo





martes, 8 de febrero de 2022

febrero 08, 2022 Posted by Uriel Martínez No comments

 Primer entrada de ese blog.


¿Qué espero con este blog?

Ayudar, en ocasiones se requiere un poco de guía en situaciones que no son tan cotidianas. Trataré de colocar la experiencia que me ha otorgado la vida después de más 13 años como programador.   

Espero les sea de ayuda

Y  para empezar  esta  súper frase: