Propiedad System.Exception.Data
En este artículo se proporcionan comentarios adicionales a la documentación de referencia de esta API.
Utilice el System.Collections.IDictionary objeto devuelto por la Data propiedad para almacenar y recuperar información complementaria relevante para la excepción. La información está en forma de un número arbitrario de pares clave-valor definidos por el usuario. El componente clave de cada par clave-valor suele ser una cadena de identificación, mientras que el componente de valor del par puede ser cualquier tipo de objeto.
Seguridad del par clave-valor
Los pares clave-valor almacenados en la colección devuelta por la Data propiedad no son seguros. Si la aplicación llama a una serie anidada de rutinas y cada rutina contiene controladores de excepciones, la pila de llamadas resultante contiene una jerarquía de esos controladores de excepciones. Si una rutina de nivel inferior produce una excepción, cualquier controlador de excepciones de nivel superior de la jerarquía de pila de llamadas puede leer o modificar los pares clave-valor almacenados en la colección por cualquier otro controlador de excepciones. Esto significa que debe garantizar que la información de los pares clave-valor no es confidencial y que la aplicación funcionará correctamente si la información de los pares clave-valor está dañada.
Conflictos de claves
Se produce un conflicto de clave cuando distintos controladores de excepciones especifican la misma clave para acceder a un par clave-valor. Tenga cuidado al desarrollar la aplicación porque la consecuencia de un conflicto clave es que los controladores de excepciones de nivel inferior pueden comunicarse involuntariamente con controladores de excepciones de nivel superior, y esta comunicación podría provocar errores sutiles del programa. Sin embargo, si tiene cuidado, puede usar conflictos clave para mejorar la aplicación.
Evitar conflictos clave
Evite conflictos de claves mediante la adopción de una convención de nomenclatura para generar claves únicas para pares clave-valor. Por ejemplo, una convención de nomenclatura podría producir una clave que consta del nombre delimitado por períodos de la aplicación, el método que proporciona información complementaria para el par y un identificador único.
Supongamos que dos aplicaciones, denominadas Productos y Proveedores, cada una tiene un método denominado Sales. El método Sales de la aplicación Products proporciona el número de identificación (la unidad de almacenamiento de existencias o SKU) de un producto. El método Sales de la aplicación Proveedores proporciona el número de identificación, o SID, de un proveedor. Por lo tanto, la convención de nomenclatura de este ejemplo produce las claves, "Products.Sales.SKU" y "Suppliers.Sales.SID".
Conflictos de clave de vulnerabilidad
Aproveche los conflictos de clave mediante la presencia de una o varias claves especiales prearrangadas para controlar el procesamiento. Supongamos que, en un escenario, el controlador de excepciones de nivel más alto de la jerarquía de pila de llamadas detecta todas las excepciones producidas por controladores de excepciones de nivel inferior. Si existe un par clave-valor con una clave especial, el controlador de excepciones de alto nivel da formato a los pares clave-valor restantes del IDictionary objeto de alguna manera no estándar; de lo contrario, los pares clave-valor restantes tienen un formato normal.
Ahora supongamos que, en otro escenario, el controlador de excepciones en cada nivel de la jerarquía de pila de llamadas detecta la excepción producida por el siguiente controlador de excepciones de nivel inferior. Además, cada controlador de excepciones conoce la colección devuelta por la Data propiedad contiene un conjunto de pares clave-valor a los que se puede tener acceso con un conjunto prearrangado de claves.
Cada controlador de excepciones usa el conjunto prearrangado de claves para actualizar el componente de valor del par clave-valor correspondiente con información única para ese controlador de excepciones. Una vez completado el proceso de actualización, el controlador de excepciones inicia la excepción en el siguiente controlador de excepciones de nivel superior. Por último, el controlador de excepciones de nivel más alto accede a los pares clave-valor y muestra la información de actualización consolidada de todos los controladores de excepciones de nivel inferior.