Puede serializar objetos de excepción. Esto es, de hecho, necesario para transportar un objeto de excepción desde el servidor al cliente, en el caso de una excepción lanzada en una llamada de servicio web. Es por eso que System.Exception
tiene un constructor overload that creates an exception object from serialized data.
Ejemplo de código para serializar/deserializar objeto de excepción:
private static void SerializeException(Exception ex, Stream stream)
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, ex);
}
private static Exception DeserializeException(Stream stream)
{
BinaryFormatter formatter = new BinaryFormatter();
return (Exception)formatter.Deserialize(stream);
}
// demo code
using (Stream memoryStream = new MemoryStream())
{
try
{
throw new NullReferenceException();
}
catch (Exception ex)
{
// serialize exception object to stream
SerializeException(ex, memoryStream);
memoryStream.Position = 0;
}
// create exception object from stream, and print details to the console
Console.WriteLine(DeserializeException(memoryStream).ToString());
}
Dicho esto, yo probablemente conformarse con ingresar el tipo de excepción, el mensaje y Seguimiento de la pila en algún lugar para que pueda examinar la información.
Sí, puede registrar la excepción en el disco, pero eso no es muy útil para un desarrollador cuando no tiene acceso a la máquina donde ocurrió la excepción. La idea es 1) Informar al desarrollador que ocurrió un error y 2) Darles tanta información que les permita rastrear el problema en lugar de recibir un correo electrónico que diga "Tu aplicación simplemente se colgó" – Calanus
Dije que puedes iniciar sesión en una base de datos El bloque de registro puede hacer eso. –
Sí, pero solo puede iniciar sesión en la base de datos si tiene acceso directo a la base de datos en cuestión, que puede no ser siempre el caso – Calanus