Archivado en: ‘Mono (C#)’ .

Controlar errores no controlados con C#

22 septiembre, 2007

Algo que me gusta de PHP es su control de errores, ya que a pesar de no tener un tipo de error común, sino que tenemos que luchar contra errores y excepciones, dispone de dos funciones para controlaras como set_error_handler y set_exception_handler.

Cuando desarrollo aplicaciones en C# echaba de menos estos algún método similar para capturar excepciones, probé varias cosas lógicas, entre ellas antes de hacer nuestro Application.Run, englobarlo todo dentro de un try y catch al siguiente estilo:

try {
  Application.Run(new Formulario());
} catch {
  Application.Run(new Formulario());
}

Esto controlaba cualquier excepción, pero me cerraba la aplicación, una opción era volver a hacer un Application.run en el catch. Si fuera una calculadora hubiera valido, pero cuando se trata de una aplicación grande, no es una solución. Tampoco podemos dejarla al aire, puesto que cuando se lance una excepción, se cerrará la aplicación.

Buscando, buscando, encontré un evento llamado Application.ThreadException, que controlara todas aquellas excepciones que se produzcan dentro de Application.Run. Controlando este evento, no tendremos que catchear todo nuestro código, sino que definiremos una ventanita que recogerá la excepción y avisara al usuario de que se ha producido un error. Dentro de esta ventana, dependiendo de cuanto queramos trabajárnosla, podremos dar opción al usuario para enviar la traza de la excepción para que el equipo de desarrolladores, pueda reparar el error para futuras versiones o actualizaciones y así poco a poco, generar una aplicación grande desde el principio y robusta poco a poco si se van controlando aquellos errores que no son los más comunes.

A continuación os dejo el código de como controlar cualquier excepción desde el principio.

using System
using System.Windows.Forms;
using System.Threading;namespace myespacio {
 
  internal sealed class MiPrograma {
 
    [STAThread]
    private static void Main(string[] args) {
      Application.ThreadException +=
      new ThreadExceptionEventHandler
        (MiPrograma.excepcion);
 
      Application.Run(new Formulario());
    }
 
    public static void excepcion(object sender,
          ThreadExceptionEventArgs excepcion) {
      MessageBox.Show("Se ha producido un error");
    }
  }
}

Conectar a una url en C#

7 septiembre, 2007

Hoy en día se necesita conectar con páginas web, bien sea para extraer información de una página o para conectar contra un WebService. DotNet o .Net, nos provee de una serie de herramientas para la conexión contra WebServices, pero hay casos excepcionales, en los que necesitaremos conectarnos de una manera más arcaica y tradicional, al estilo de la librería cURL por ejemplo.

En este caso mostrare un ejemplo de como conectarnos a una url de un WebService ficticio y como recoger su contenido para luego ser tratado.

En primer lugar crearemos un String donde poner la url de la conexión. Seguidamente contectaremos utilizando los objetos HttpWebRequest y HttpWebResponse y generaremos un StreamReader con la respuesta.

El código quedaría así:

  String baseUri = "http://rutaalwebserice";
  HttpWebRequest connection =
  (HttpWebRequest)HttpWebRequest.Create(baseUri);
 
  connection.Method = "GET";
  HttpWebResponse response =
  (HttpWebResponse)connection.GetResponse();
 
  StreamReader sr =
  new StreamReader(response.GetResponseStream(),
  Encoding.UTF8);

Ya tenemos nuestra variable sr (StreamReader) para poder utilizarla para trabajar con el supuesto XML o HTML devuelto.

Es importante apuntar, que para utilizar estas librerías, necesitamos incluir los siguientes nombres de espacio:

  using System.Web;
  using System.Net;
  using System.IO;
  using System.Text;