Udostępnij za pośrednictwem


Właściwość System.Exception.Data

Ten artykuł zawiera dodatkowe uwagi dotyczące dokumentacji referencyjnej dla tego interfejsu API.

System.Collections.IDictionary Użyj obiektu zwróconego Data przez właściwość, aby przechowywać i pobierać dodatkowe informacje istotne dla wyjątku. Informacje są w postaci dowolnej liczby par klucz/wartość zdefiniowanych przez użytkownika. Kluczowym składnikiem każdej pary klucz/wartość jest zazwyczaj ciąg identyfikujący, podczas gdy składnik wartości pary może być dowolnym typem obiektu.

Zabezpieczenia pary klucz/wartość

Pary klucz/wartość przechowywane w kolekcji zwróconej przez Data właściwość nie są bezpieczne. Jeśli aplikacja wywołuje zagnieżdżonych serii procedur, a każda z procedur zawiera procedury obsługi wyjątków, wynikowy stos wywołań zawiera hierarchię tych procedur obsługi wyjątków. Jeśli procedura niższego poziomu zgłasza wyjątek, każdy program obsługi wyjątków wyższego poziomu w hierarchii stosu wywołań może odczytywać i/lub modyfikować pary klucz/wartość przechowywane w kolekcji przez każdą inną procedurę obsługi wyjątków. Oznacza to, że należy zagwarantować, że informacje w parach klucz/wartość nie są poufne i że aplikacja będzie działać poprawnie, jeśli informacje w parach klucz/wartość są uszkodzone.

Konflikty kluczy

Konflikt klucza występuje, gdy różne programy obsługi wyjątków określają ten sam klucz, aby uzyskać dostęp do pary klucz/wartość. Należy zachować ostrożność podczas tworzenia aplikacji, ponieważ konsekwencją konfliktu klucza jest to, że programy obsługi wyjątków niższego poziomu mogą przypadkowo komunikować się z procedurami obsługi wyjątków wyższego poziomu, a ta komunikacja może powodować drobne błędy programu. Jeśli jednak zachowasz ostrożność, możesz użyć konfliktów kluczy w celu ulepszenia aplikacji.

Unikanie konfliktów kluczy

Unikaj konfliktów kluczy, stosując konwencję nazewnictwa w celu generowania unikatowych kluczy dla par klucz/wartość. Na przykład konwencja nazewnictwa może spowodować uzyskanie klucza składającego się z nazwy rozdzielanej kropkami aplikacji, metody, która udostępnia dodatkowe informacje dla pary i unikatowy identyfikator.

Załóżmy, że dwie aplikacje o nazwie Products i Suppliers mają metodę o nazwie Sales. Metoda Sales w aplikacji Products udostępnia numer identyfikacyjny (jednostkę przechowywania zapasów lub jednostkę SKU) produktu. Metoda Sales w aplikacji Dostawcy udostępnia numer identyfikacyjny lub identyfikator SID dostawcy. W związku z tym konwencja nazewnictwa dla tego przykładu daje klucze "Products.Sales.SKU" i "Suppliers.Sales.SID".

Konflikty kluczy wykorzystujące luki w zabezpieczeniach

Wykorzystanie konfliktów kluczy przy użyciu obecności co najmniej jednego specjalnego, wstępnie ułożonego klucza w celu kontrolowania przetwarzania. Załóżmy, że w jednym scenariuszu procedura obsługi wyjątków najwyższego poziomu w hierarchii stosu wywołań przechwytuje wszystkie wyjątki zgłaszane przez programy obsługi wyjątków niższego poziomu. Jeśli istnieje para klucz/wartość ze specjalnym kluczem, program obsługi wyjątków wysokiego poziomu formatuje pozostałe pary klucz/wartość w IDictionary obiekcie w sposób niestandardowy; w przeciwnym razie pozostałe pary klucz/wartość są formatowane w jakiś normalny sposób.

Teraz załóżmy, że w innym scenariuszu procedura obsługi wyjątków na każdym poziomie hierarchii stosu wywołań przechwytuje wyjątek zgłaszany przez następną procedurę obsługi wyjątków niższego poziomu. Ponadto każda procedura obsługi wyjątków wie, że kolekcja zwrócona przez Data właściwość zawiera zestaw par klucz/wartość, do których można uzyskać dostęp za pomocą wstępnie ustawionego zestawu kluczy.

Każda procedura obsługi wyjątków używa wstępnie ustawionego zestawu kluczy, aby zaktualizować składnik wartości odpowiedniej pary klucz/wartość z informacjami unikatowymi dla tej procedury obsługi wyjątków. Po zakończeniu procesu aktualizacji program obsługi wyjątków zgłasza wyjątek do kolejnej procedury obsługi wyjątków wyższego poziomu. Na koniec procedura obsługi wyjątków najwyższego poziomu uzyskuje dostęp do par klucz/wartość i wyświetla skonsolidowane informacje o aktualizacji ze wszystkich procedur obsługi wyjątków niższego poziomu.