Blog de Francisco Velázquez

otro blog personal

Posts Tagged ‘c#

Enumerados mejorados en C#

leave a comment »

Un par de artículos que explican como extender la funcionalidad de los Enumerados en c#. via.

Written by fravelgue

October 28, 2009 at 11:06 pm

Posted in development

Tagged with , , ,

Enumerados y Atributos

leave a comment »

Siempre me ha encantado la manera en que Gentle.NET maneja los errores, usando enumerados y atributos.

	/// <summary>
	/// This enumeration lists all common error conditions, their severity and a
	/// default error message.
	/// Unspecified errors or errors with no severity attribute are treated as critical.
	/// At this time almost all errors have been brainlessly classified as critical pending
	/// a review at some future time.
	/// </summary>
	public enum Error
	{
		/// <summary>
		/// This error is used when no connection to the database server could be
		/// established. This is usually caused by errors in the connection
		/// string, but can also be due to network or database server problems.
		/// </summary>
		[Level( Severity.Critical ),
		 Message( "The database backend (provider {0}) could not be reached.\r\n" +
		          "Check the connection string: {1}" )]
		DatabaseUnavailable,

		/// <summary>
		/// This error is used when an error in the use of Gentle was detected
		/// (e.g. invalid use of or missing custom attributes). No default message
		/// is provided for this error (if used via the Check class the first
		/// argument will be used as format string for remaining arguments).
		/// </summary>
		[Level( Severity.Error )]
		DeveloperError

Hoy he estado usando esta técnica en un proyecto.  Además he encontrado esta librería que también me ha servido de inspiración.

Written by fravelgue

September 8, 2009 at 4:30 pm

Posted in development

Tagged with , , , ,

Serialización Binaria en .Net: Protocol Buffers

leave a comment »

Debido a un proyecto en el que estoy ahora mismo estoy evaluando la serialización binaria en lugar de la habitual en XML. Parece que la implementación a través de BinaryFormatters no es la más adecuada. Parecen muy interesantes las implementaciones de Protocol Buffers que existen, tanto la de Jon Sket, de la que ya hablamos, tanto com la de Marc Grawell. Podemos ver en que se diferencia en este hilo de stackoverflow.

Written by fravelgue

July 13, 2009 at 12:42 pm

HttpWebRequest Timeout in HTTP Get

leave a comment »

En estos últimos días he tenido un problema bastante curioso. Era una aplicación multi-hilo (50 hilos simultáneos de ejecución) que realizaba peticiones HTTP Get a distintos servidores. El problema es que se presentaban bastante timeouts en las peticiones HTTP y sin embargo el servidor estaba en un correcto funcionamiento.

El código era algo como esto:

public static string Get2(string uri)
{
    string responseData = string.Empty;
    WebRequest request = WebRequest.Create(uri) as HttpWebRequest;
    request.Method = "GET";
    request.Timeout = 35000;
    using(HttpWebResponse response = (HttpWebResponse)request.GetResponse() as HttpWebResponse)
    {
        using(Stream dataStream = response.GetResponseStream ())
        {
            using(StreamReader reader = new StreamReader (dataStream))
            {
                responseData = reader.ReadToEnd();
            }
        }
    }
    return responseData;
}

Tras buscar, encontré bastantes links y este bastante interesante.

El problema era que .NET sólo permite 2 conexiones HTTP a cada sitio, tal y como establece el el protocolo HTTP1.1. Para aumentar este número, lo único que hace falta es incluir esta configuración en el app.config o web.config.

<connectionManagement>
<addaddress="*"maxconnection="40"/>
</connectionManagement>

Written by fravelgue

June 30, 2009 at 1:17 pm

Consejos para evitar bloqueos e interbloqueos

leave a comment »

Interesante post con unas conclusiones que merecen tenerse en cuenta:

  • Nunca bloquees por un objeto que no sea estático:

Eso solo serviría para proteger los miembros de esa instancia concreta, y rara vez es esto lo que deseamos con un lock.

  • Nunca hagas un lock sobre un objeto publico:

Como se explico previamente, el lock sobre el objeto publico significa que otra parte de la aplicación puede hacer un lock sobre el mismo objeto y ocasionar un interbloqueo.

  • Sobre todo, la mas importante de todas… Nunca hagas un lock sobre un System.RuntimeType o System.Type:

Ya sabéis, si leísteis la parte teórica, que estos tipos son Marshal-by-bleed, lo que significa que se comparten entre dominios de aplicación diferentes. El riesgo de interbloqueo es enorme, y no puedo pensar en un solo escenario en que tenga sentido hacer ese bloqueo.

Written by fravelgue

June 30, 2009 at 11:53 am

Posted in development

Tagged with , ,

Protocol Buffers en C#

leave a comment »

Leyendo el siempre interesante blog de Ayende, descubro la manera en la google serializa sus datos: Protocol Buffers, y su implementación por Jon Sket en c#.

Written by fravelgue

May 12, 2009 at 4:19 pm

POST multipart message MIME

leave a comment »

Written by fravelgue

March 2, 2009 at 10:29 am

Posted in development

Tagged with , , , , ,

Serialize/Deserialize

leave a comment »

using System.IO;
 using System.Xml;
 using System.Xml.Serialization;

private string serialize(System.Type type, Object data)
 {
 XmlSerializer xmlSerializer = new XmlSerializer(type);
 System.IO.TextWriter writer = new System.IO.StringWriter();
 xmlSerializer.Serialize(writer, data);
 writer.Close();
 return writer.ToString();
 }

private object deserialize(System.Type type, string data)
 {
 XmlSerializer xmlSerializer = new XmlSerializer(type);
 TextReader textReader = new StringReader(data);
 XmlReader xmlReader = new XmlTextReader(textReader);
 return xmlSerializer.Deserialize(xmlReader);
 }

Written by fravelgue

September 19, 2006 at 9:52 am

Posted in development

Tagged with , , , ,