Properti System.Exception.Data

Artikel ini menyediakan keterangan tambahan untuk dokumentasi referensi untuk API ini.

Gunakan objek yang System.Collections.IDictionary dikembalikan oleh Data properti untuk menyimpan dan mengambil informasi tambahan yang relevan dengan pengecualian. Informasi tersebut dalam bentuk jumlah pasangan kunci/nilai yang ditentukan pengguna. Komponen utama dari setiap pasangan kunci/nilai biasanya merupakan string identifikasi, sedangkan komponen nilai pasangan dapat berupa semua jenis objek.

Keamanan pasangan kunci/nilai

Pasangan kunci/nilai yang disimpan dalam koleksi yang dikembalikan oleh Data properti tidak aman. Jika aplikasi Anda memanggil serangkaian rutinitas berlapis, dan setiap rutinitas berisi penangan pengecualian, tumpukan panggilan yang dihasilkan berisi hierarki penangan pengecualian tersebut. Jika rutinitas tingkat bawah melempar pengecualian, handler pengecualian tingkat atas apa pun dalam hierarki tumpukan panggilan dapat membaca dan/atau memodifikasi pasangan kunci/nilai yang disimpan dalam koleksi oleh handler pengecualian lainnya. Ini berarti Anda harus menjamin bahwa informasi dalam pasangan kunci/nilai tidak rahasia dan bahwa aplikasi Anda akan beroperasi dengan benar jika informasi dalam pasangan kunci/nilai rusak.

Konflik utama

Konflik kunci terjadi ketika penangan pengecualian yang berbeda menentukan kunci yang sama untuk mengakses pasangan kunci/nilai. Berhati-hatilah saat mengembangkan aplikasi Anda karena konsekuensi dari konflik utama adalah bahwa penangan pengecualian tingkat bawah secara tidak sengaja dapat berkomunikasi dengan handler pengecualian tingkat yang lebih tinggi, dan komunikasi ini dapat menyebabkan kesalahan program yang halus. Namun, jika Anda berhati-hati, Anda dapat menggunakan konflik kunci untuk meningkatkan aplikasi Anda.

Hindari konflik utama

Hindari konflik utama dengan mengadopsi konvensi penamaan untuk menghasilkan kunci unik untuk pasangan kunci/nilai. Misalnya, konvensi penamaan mungkin menghasilkan kunci yang terdiri dari nama aplikasi Anda yang dibatasi periode, metode yang menyediakan informasi tambahan untuk pasangan tersebut, dan pengidentifikasi unik.

Misalkan dua aplikasi, bernama Produk dan Pemasok, masing-masing memiliki metode bernama Sales. Metode Penjualan dalam aplikasi Produk menyediakan nomor identifikasi (unit penyimpanan stok atau SKU) produk. Metode Penjualan dalam aplikasi Pemasok menyediakan nomor identifikasi, atau SID, dari pemasok. Akibatnya, konvensi penamaan untuk contoh ini menghasilkan kunci, "Products.Sales.SKU" dan "Suppliers.Sales.SID".

Mengeksploitasi konflik kunci

Mengeksploitasi konflik kunci dengan menggunakan adanya satu atau beberapa kunci khusus yang telah diatur sebelumnya untuk mengontrol pemrosesan. Misalkan, dalam satu skenario, handler pengecualian tingkat tertinggi dalam hierarki tumpukan panggilan menangkap semua pengecualian yang dilemparkan oleh handler pengecualian tingkat bawah. Jika pasangan kunci/nilai dengan kunci khusus ada, handler pengecualian tingkat tinggi memformat pasangan kunci/nilai yang tersisa dalam objek dengan IDictionary beberapa cara yang tidak biasa; jika tidak, pasangan kunci/nilai yang tersisa diformat dengan cara yang normal.

Sekarang misalkan, dalam skenario lain, handler pengecualian di setiap tingkat hierarki tumpukan panggilan menangkap pengecualian yang dilemparkan oleh handler pengecualian tingkat bawah berikutnya. Selain itu, setiap handler pengecualian mengetahui koleksi yang dikembalikan oleh Data properti berisi sekumpulan pasangan kunci/nilai yang dapat diakses dengan sekumpulan kunci yang telah diatur sebelumnya.

Setiap handler pengecualian menggunakan sekumpulan kunci yang telah diatur sebelumnya untuk memperbarui komponen nilai pasangan kunci/nilai yang sesuai dengan informasi yang unik untuk penanganan pengecualian tersebut. Setelah proses pembaruan selesai, handler pengecualian melemparkan pengecualian ke handler pengecualian tingkat lebih tinggi berikutnya. Terakhir, handler pengecualian tingkat tertinggi mengakses pasangan kunci/nilai dan menampilkan informasi pembaruan terkonsolidasi dari semua handler pengecualian tingkat bawah.