이 문서는 이 API에 대한 참조 설명서를 보충하는 추가 설명을 제공합니다.
속성에서 반환된 System.Collections.IDictionary 개체를 Data 사용하여 예외와 관련된 추가 정보를 저장하고 검색합니다. 정보는 임의의 수의 사용자 정의 키/값 쌍 형식입니다. 각 키/값 쌍의 키 구성 요소는 일반적으로 식별 문자열인 반면 쌍의 값 구성 요소는 모든 유형의 개체일 수 있습니다.
키/값 쌍 보안
속성에서 반환된 컬렉션에 저장된 키/값 쌍은 Data 안전하지 않습니다. 애플리케이션이 중첩된 일련의 루틴을 호출하고 각 루틴에 예외 처리기가 포함된 경우 결과 호출 스택에는 해당 예외 처리기의 계층이 포함됩니다. 하위 수준 루틴에서 예외를 throw하는 경우 호출 스택 계층 구조의 모든 상위 수준 예외 처리기는 다른 예외 처리기에서 컬렉션에 저장된 키/값 쌍을 읽거나 수정할 수 있습니다. 즉, 키/값 쌍의 정보가 기밀이 아니며 키/값 쌍의 정보가 손상된 경우 애플리케이션이 올바르게 작동한다는 것을 보장해야 합니다.
주요 충돌
키 충돌은 다른 예외 처리기가 키/값 쌍에 액세스하기 위해 동일한 키를 지정하는 경우에 발생합니다. 키 충돌의 결과로 하위 수준 예외 처리기가 실수로 더 높은 수준의 예외 처리기와 통신할 수 있고 이 통신으로 인해 미묘한 프로그램 오류가 발생할 수 있으므로 애플리케이션을 개발할 때는 주의해야 합니다. 그러나 신중한 경우 주요 충돌을 사용하여 애플리케이션을 향상시킬 수 있습니다.
키 충돌 방지
키/값 쌍에 대한 고유 키를 생성하는 명명 규칙을 채택하여 키 충돌을 방지합니다. 예를 들어 명명 규칙은 애플리케이션의 마침표로 구분된 이름, 쌍에 대한 추가 정보를 제공하는 메서드 및 고유 식별자로 구성된 키를 생성할 수 있습니다.
제품 및 공급업체라는 두 애플리케이션에 각각 Sales라는 메서드가 있다고 가정합니다. Products 애플리케이션의 Sales 메서드는 제품의 ID 번호(재고 유지 단위 또는 SKU)를 제공합니다. Suppliers 애플리케이션의 Sales 메서드는 공급업체의 ID 번호 또는 SID를 제공합니다. 따라서 이 예제의 명명 규칙은 "Products.Sales.SKU" 및 "Suppliers.Sales.SID" 키를 생성합니다.
주요 충돌 활용
하나 이상의 특수한 미리 정렬된 키를 사용하여 처리를 제어하여 키 충돌을 악용합니다. 한 시나리오에서 호출 스택 계층 구조의 가장 높은 수준의 예외 처리기가 하위 수준 예외 처리기에서 발생시킨 모든 예외를 잡는다고 가정합니다. 특수 키가 있는 키/값 쌍이 있는 경우 상위 수준 예외 처리기는 개체의 나머지 키/값 쌍 IDictionary 의 형식을 비표준 방식으로 지정하고, 그렇지 않으면 나머지 키/값 쌍의 형식이 일반적인 방식으로 지정됩니다.
이제 다른 시나리오에서는 호출 스택 계층 구조 내의 각 수준에 있는 예외 처리기가 다음 하위 수준의 예외 처리기에 의해 발생된 예외를 catch한다고 가정합니다. 또한 각 예외 처리기는 속성에서 반환된 Data 컬렉션에 미리 정렬된 키 집합으로 액세스할 수 있는 키/값 쌍 집합이 포함되어 있음을 알고 있습니다.
각 예외 처리기는 미리 구성된 키 집합을 사용하여 해당 키/값 쌍의 값 구성 요소를 해당 예외 처리기에 고유한 정보로 업데이트합니다. 업데이트 프로세스가 완료되면 예외 처리기가 다음 상위 수준 예외 처리기에 예외를 throw합니다. 마지막으로, 가장 높은 수준의 예외 처리기는 키/값 쌍에 액세스하고 모든 하위 수준 예외 처리기의 통합 업데이트 정보를 표시합니다.
.NET