google analytics

martes, 24 de julio de 2012

Log4Net en C#

Siempre es importante tener logs en nuestras aplicaciones, sobretodo en entornos cerrados donde tengamos accesos limitados o cuando ocurre una excepción inesperada que nos pone los pelos de punta y no sabemos por donde atacar. Hace ya bastante tiempo vengo usando Log4Net y bueno como parece que ahora si le estoy dedicando tiempo al blog y tuve un pequeño problema hace poco que comentaré en el siguiente post, quise escribir sobre esto.

Lo primero, descargarse la release desde aquí:  http://logging.apache.org/log4net/download_log4net.cgi

Seleccionamos uno de los archivos binarios, descargamos, descrompimimos el archivo zip y vamos a la carpeta  "\bin\net\4.0\release"  en el cual encontraremos el archivo log4net.dll  y lo añademos como referencia a nuestro proyecto.

Lo siguiente es modificar el web.config. Añadimos la siguiente sección dentro del <configsections> del web.config:

    
.... .... ....
Lo siguiente es añadir la parte de la configuración para el log4net. En nuestro caso sólo queremos escribir sobre un archivo, pero aquí tienes muchas más opciones de configuración.

 
    
      
      
      
      
      
       
       
      
        
      
    
    
      
      
    


Dentro del appender ponemos la configuración necesaria sobre como queremos que se escriba nuestro log, esta claro que podemos tener varios appenders, por ejemplo uno para que escriba un archivo de texto y otro para que guarda en base de datos.

Luego desde la parte de root señalamos el nivel del Log, que pueden ser INFO, DEBUG, WARNING o ERROR y tambien indicamos los appenders que usará nuestro log.

Por último vamos al Global.asax, importamos el
using log4net;

Añadimos el siguiente código
private static readonly ILog Log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

Y en el Application_Start() añadimos lo siguiente:
protected void Application_Start()
{
    log4net.Config.XmlConfigurator.Configure();
}

Ya tenemos todo configurado para usar nuestro log, a partir de ahora, dependiendo del nivel en el que hallas seteado tu log, este escribirá en el archivo de texto, bd o como sea que lo hayas configurado.

Aqui les dejo un ejemplo simple para escribir en el log cuando ocurra alguna excepción:
public static void GenerandoError()
        {
            try
            {
                int numero = 53454534543543534324;
            }
            catch (Exception e)
            {
                Log.Error(e.Message, e);
            }
        }
Espero les sea útil, hasta la próxima :D!

Primeros pasos con Visual Studio 2012: Instalación

Si, si  !! ... a lo mejor ya voy un poco tarde con esto =) , pero ahora que dispongo con un poco más de tiempo en el trabajo me puse a descargar el RC de Visual Studio 2012 que lo puedes obtener desde aquí:

http://www.microsoft.com/visualstudio/11/es-es/downloads#ultimate

En mi caso, descargué la versión ultimate, pero si quieres otra versión tambien la puedes encontrar. Al terminar de descargar y ejecutar sale la siguiente ventana:


Aceptas los términos y las condiciones y la das a 'Next' apareciendo la siguiente ventana:

Esta ventana muestra el listado de las herramientas que puedes instalar, como muchas de estas cosas son nuevas para mi le dí a instalar todo y poco a poco iremos investigando de que se trata cada una de estas nuevas herramientas y las mejoras de VS 2012.

Una vez finalizada la instalación, ya tenemos el entorno de Visual Studio instalado y listo para empezar =) 



Proximamente mis primeros pasos con esta nueva versión de .Net =)

jueves, 19 de julio de 2012

ASP .NET libre???

Pues si, hace tiempo ya lo había escuchado, pero así como a mi, seguro que a mucha gente en ese momento les habrá sorprendido para luego olvidarse de esto. Desde 2009 ASP.NET MVC Framework es software libre. A principios de abril de 2009 se empezo a distribuir el código fuente de ASP.NET MVC con licencia MS-PL, un modelo de licencia aprobado por la OSI(Open Source Initiative) que permite el uso del software en aplicaciones comerciales y no comerciales.

El código fuente de ASP.NET MVC se puede descargar en Codeplex, asi que gente del mundo del software libre, aqui tienen otra alternativa que les puede ser interesante.

Hasta la próxima

viernes, 13 de julio de 2012

JSON y MVC 3

Supongamos que tenemos una aplicación web y necesitamos recuperar valores de servidor o actualizar a una BD desde la parte del cliente, para este caso podríamos usar JSON. Con JSON podemos ir al servidor de una manera síncrona ó asíncrona y recuperar cualquier valor, tanto como variables y objetos o efectuar cualquier operación que se pueda realizar del lado del servidor. Eso si tenemos que tener cuidado al querer traer objetos con mucha información ya que JSON funciona muy bien, pero si te quieres traer una lista de 2000 objetos (por poner un número =P )...vas a sufrir, para ese caso podrias hacer el uso de un PartialView en MVC por darte un ejemplo !

Pues al lío !  Lo primero que tenemos que hacer es importar Jquery en nuestra página:

<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>

En mi caso tengo el 'jquery-1.5.1.min.js' dentro de la carpeta Scripts y estoy usando MVC 3 con RazorEngine pero si estas usando un webForm puedes hacerlo de la siguiente manera:

<script src="/Scripts/jquery-1.5.1.min.js" type="text/javascript"></script>



A continuación llamamos a la función JSON. En mi ejemplo mostraremos un 'alert' con un mensaje que será traido desde el servidor cada vez que se inicializa la página.


Para los que no conocen jquery, eh aquí la explicación:
    (function ($) {
        FunctionJson();
    })(jQuery);
Llamamos a 'function ($)' que es una función que se ejecuta cada vez que se inicializa la página. En este ejemplo, esta función llama a la función FunctionJson en la cual está la llamada json:
   
           $.ajax({
                async: false,
                url: '/Home/RetornaValores',
                dataType: 'json',
                data: { },
                type: "POST",
                cache: false,
                success: function (data) {
                    if (data.ok) {
                        alert(data.mensaje);
                    }
                    else {
                        alert(data.mensaje);
                    }
                }
            });
Donde la llamada json tiene los siguientes parámetros:

  • async: que indica si la función va a ser asíncrona o no.
  • url: donde se indica la url que tiene el webMethod (para un webForm) o el controlador (para MVC).
  • data: aqui se establecen los parámetros si la función del webMethod o del controlador tiene parámetros.
  • type: se establece el tipo de llamada 'POST' o 'GET'.
  • cache: si la función almacenará en caché.
  • success: devuelve el resutado de la operación.

En nuestro caso la funcion JSON llama a la función 'RetornaValores' del controller 'Home'
    public JsonResult RetornaValores()
        {
            try
            {
                return Json(new { ok = true, mensaje = "Hola Mundo" }, JsonRequestBehavior.AllowGet);
            }
            catch (Exception ex)
            {
                return Json(new { ok = false, mensaje = ex.Message }, JsonRequestBehavior.AllowGet);
            }
        }
La función devuelve un objeto Json en el cual le podemos setear los valores que queramos. Si se fijan tambien podriamos manejar los errores de está manera. El resultado final sería el siguiente:


Esta claro que se puede hacer lo que quiera dentro de la función RetornaValores y devolver lo que se nos de la gana, pero siempre teniendo cuidado del tiempo de respuesta y el peso que se quiere devolver a la parte cliente. Nos vemos !!

viernes, 6 de julio de 2012

IEnumerator usando .MoveNext() y .MoveCurren()

Jugando la otra vez a hacer iteraciones me encontre con la interfaz IEnumerator la cual tienes dos funciones que me parecieron interesantes y he aquí el post.

Las funciones .MoveNext() y .MoveCurrent() sirven para hacer una iteración dentro de una colección genérica, .MoveNext() nos indica a través de un booleano si la colección tiene más elementos para recorrer y la función .MoveCurrent() me devuelve el item actual dentro de la iteracíón.

He aquí el código en una aplicación de consola:
static void Main(string[] args)
        {
            Console.WriteLine("Ingrese una secuencia de caracteres separadas por comas...");
            var readLine = Console.ReadLine();

            if (!string.IsNullOrEmpty(readLine))
            {
                string[] valores = readLine.Split(',');

                IEnumerable characters = readLine.Split(',');

                using (IEnumerator enums = characters.GetEnumerator())
                {
                    while (enums.MoveNext())
                    {
                        Console.WriteLine(enums.Current);
                    }
                }
            }

            Console.ReadKey();
        }

Y el resultado es el siguiente :


Se pudo haber hecho con un foreach??? ... ps si =)... pero aquí tienes otra forma de hacerlo =)

Leer acentos con StreamReader

Ya que en el post anterior mostrábamos como leer archivos en c#, a veces se da el caso que ese fichero de texto tenga palabras con tildes que a veces se muestran de manera incorrecta al procesarlos, para eso tomamos el ejemplo del anterior post y lo modificamos un poco:

private void ProcesarFichero()
{
            if (this.fuFicheros.HasFile)
            {
                string filename = this.fuFicheros.PostedFile.FileName;

                if (filename.Substring(filename.LastIndexOf('.')).Trim().ToUpper() == ".CSV")
                {
                    string line;
                    StringBuilder log = new StringBuilder();
                    Stream stream = this.fuFicheros.FileContent;
                   
                    using (StreamReader sr = new StreamReader(stream, System.Text.Encoding.Default,
 false))
                    {
                        while (!string.IsNullOrEmpty(line = sr.ReadLine()))
                        {
                            log.AppendLine(line);
                        }
                    }
                }
            }
        }


Si se fijan en la línea número 13, sólo hemos llamado a otra sobrecarga de la clase StreamReader.

                    using (StreamReader sr = new StreamReader(stream, System.Text.Encoding.Default, false))


De está manera nos aseguramos que leemos el archivo de manera correcta sin caracteres raros. Espero les haya servido.


Leyendo ficheros de texto en c#

Muchas veces nos hemos visto con la necesidad de leer un fichero y procesar la información que este contiene. Para esta tarea utilizo la clase StreamReader.

A continuación vamos a leer un ejemplo .csv a traves del control FileUpload de ASP .NET y procesar sus datos, para esto hacemos lo siguiente:

Importamos la libreria System.IO.
using System.IO;

Y añadimos este código
        
private void ProcesarFichero()
{
            if (this.fuFicheros.HasFile)
            {
                string filename = this.fuFicheros.PostedFile.FileName;

                if (filename.Substring(filename.LastIndexOf('.')).Trim().ToUpper() == ".CSV")
                {
                    string line;
                    StringBuilder log = new StringBuilder();
                    Stream stream = this.fuFicheros.FileContent;
                   
                    using (StreamReader sr = new StreamReader(stream))
                    {
                        while (!string.IsNullOrEmpty(line = sr.ReadLine()))
                        {
                            log.AppendLine(line);
                        }
                    }
                }
            }
        }

Donde fuFicheros es el nombre del control FileUpload. Lo primero que hacemos es verificar si este control contiene un fichero seleccionado, luego obtenemos el nombre del archivo y verificamos que tenga la extensión del archivo sea la adecuada (en nuestro ejemplo queremos que sea un archivo .csv).  Finalmente hacemos uso del StreamReader y lo recorremos mediante un while hasta que no tengamos una línea más que leer. En mi caso almacené cada línea del fichero en un StringBuilder.

Nota: Esto de verificar la extensión del archivo también se puede hacer de la siguiente manera: 
if (this.fuFicheros.PostedFile.ContentType == "application/vnd.ms-excel")
{
//
}

En este caso para los archivos .csv el contentType es el que se muestra arriba, pero me di cuenta que al tener abierto ese archivo (desde excel por ejemplo) cambiaba el contentType por lo cual decidí verificar la extensión del archivo como mostré mucho más arriba (si tienen alguna otra mejor manera de hacerlo sería genial que me lo indiquen).


Espero les sirva de ayuda =)


Esperemos que ahora si =) !!

Mi primer blog     Tanto tiempo deseando tener un blog y tantas veces postergándolo, espero esta vez si pueda cumplir con esta tarea pendiente que llevo hace tiempo. Espero que este blog les pueda servir de mucha ayuda, trataré de postear problemas comunes del día a día en el trabajo y también temas interesantes acerca de desarrollo de software Los temas principales de este blog serán acerca de Visual Studio .Net, asi como tambien  de Asp .Net MVC, Jquery, TFS y nuevas herramientas que vaya usando en el camino. Espero que les sea de su agrado =).


 Jhon Marmolejo