domingo, 31 de octubre de 2010

Un regalo para amig@s, novi@s o espos@s linuxer@s y viajer@s.

Este blog es de .Net, pero no pude evitar hacer una foto a estas maletas con forma de pingüinos y pensar en el marido de una amiga que le va mucho el pingüino y de tanto en tanto tiene que viajar.



No entré a mirar el precio, pero los tamaños parecían variados, la tienda Banana Natura:



En Barcelona Carrer del Rosselló 226, metro Diagonal.

miércoles, 14 de abril de 2010

Desde el XML a nuestra clase con C#

El otro día me anoté en este blog para acordarme como generar la definición de clase (en C#) desde un esquema xsd con xsd.exe y poder generar luego el XML. ¿Pero qué hacer si nos dan el XML? La respuesta aquí. Así cerramos el círculo.

jueves, 1 de abril de 2010

Como crear una clase a partir de un fichero XML o XSD y luego el XML con C#.

Aquí está muy bien explicado como conseguir pasar desde un esquema (xsd) a tener la clase que corresponde al esquema. Una vez llenemos nuestra clase pondremos pasar a tener el xml serializando con un método como este:

private
static
void Serializar(object pObjeto, string pPathXml)

{
try
{


// Generamos el xml.

FileStream fs = null;

try

{

System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(pObjeto.GetType());

fs = new
FileStream(pPathXml, FileMode.Create, FileAccess.Write);

serializer.Serialize(fs, pObjeto);

} catch

{
throw;

}
finally

{
if (fs != null)

{

fs.Close();

}

}

}


catch (Exception wExc) { throw wExc; }

}

Donde pObjeto es del tipo de Clase generada previamente, y pPathXml la ruta completa donde guardaremos el XML.

miércoles, 10 de febrero de 2010

Gestión y serialización de errores

En nuestras páginas necesitamos gestionar los errores no contralados. Una buena práctica es guardar un log de errores en XML. Si intentamos serializar la excepción (Exception) nos dar un error. Hay varias alternativas en internet pero yo estoy probando con algo sencillo y entendible.

Me he creado una clase Errores y dentro de ella un método que tendremos que poner en cada try catch.

El método:

public
class
Errores

{


const string cSaltoASP = "\r\n";

public Errores()

{

//


// TODO: Agregar aquí la lógica del constructor


//

}

public
static
void Gestionar(Exception pErr)

{

string wCarpetaLog = ConfigurationManager.AppSettings["CarpetaLog"].ToString() + @"\Excepciones\";

string wDocPath = wCarpetaLog + "fileErrores.xml";

string PathXml = wDocPath;


DataTable dt = new
DataTable("Excepcion");

dt.Columns.Add("NowTime");

dt.Columns.Add("Data");

dt.Columns.Add("HelpLink");

dt.Columns.Add("InnerException");

dt.Columns.Add("Message");

dt.Columns.Add("Source");

dt.Columns.Add("StackTrace");

dt.Columns.Add("TargetSite");



DataRow dr = dt.NewRow();

dr["NowTime"] = Excelium.Generales.AAAAMMDD(DateTime.Today) + " " + DateTime.Now.ToShortTimeString();



if (pErr.Data != null)

{

dr["Data"] = pErr.Data.ToString();

}


if (pErr.HelpLink != null)

{

dr["HelpLink"] = pErr.HelpLink.ToString();

}


if (pErr.InnerException != null)

{

dr["InnerException"] = pErr.InnerException.ToString();

}


if (pErr.Message != null)

{

dr["Message"] = pErr.Message.ToString();

}


if (pErr.Source != null)

{

dr["Source"] = pErr.Source.ToString();

}


if (pErr.StackTrace != null)

{

dr["StackTrace"] = pErr.StackTrace.ToString();

}


if (pErr.TargetSite != null)

{

dr["TargetSite"] = pErr.TargetSite.ToString();

}


dt.Rows.Add(dr);



DataSet ds = new
DataSet("Excepciones");

ds.Tables.Add(dt);



FileStream fs = null;

fs = new
FileStream(PathXml, FileMode.Append, FileAccess.Write);

ds.WriteXml(fs);

fs.Close();



string sAll = string.Empty;



using (System.IO.StreamReader sr = new System.IO.StreamReader(PathXml, System.Text.Encoding.Default))

{

sAll = sr.ReadToEnd();

}


//



sAll = sAll.Replace(cSaltoASP,"");

sAll = sAll.Replace("</Excepciones><Excepciones>", "");


//


using (System.IO.StreamWriter sw = new System.IO.StreamWriter(PathXml, false, System.Text.Encoding.Default))

{

sw.WriteLine(sAll);

sw.Flush();

}

}

}

Su Uso.


try

{


//Nuestro código;

catch (Exception e)

{


Errores.Gestionar(e);

}

Aviso.

Estoy probando todavía y queda mejorarlo.