Pengecualian Kustom
Untuk situasi di mana ada kesalahan yang tidak dapat dipulihkan, solusi Manajemen Proses Bisnis menggunakan kombinasi penangan pengecualian dan pengecualian kustom.
Daripada menggunakan hentikan bentuk dalam orkestrasi yang disebut, Anda dapat menggunakan pola melempar pengecualian yang ditangani oleh orkestrasi akar. Ini memungkinkan orkestrasi dengan pengetahuan seluas-luasnya tentang konteks untuk membuat keputusan tentang penanganan pengecualian. Memiliki orkestrasi bawahan melemparkan pengecualian kustom memungkinkan Anda untuk mengomunikasikan informasi yang lebih spesifik ke orkestrasi akar.
Solusi manajemen proses bisnis mengikuti pola ini. Ada empat orkestrasi root, atau uncalled, dalam solusi: OrderBroker, OrderManager, CableOrder1, dan CableOrder2. Tiga orkestrasi akar menerima dan menangani pengecualian kustom: OrderManager, CableOrder1, dan CableOrder2.
Perhatikan bahwa beberapa orkestrasi akar menggunakan bentuk Hentikan dan bahwa bentuk Hentikan muncul tepat sebelum titik akhir normal orkestrasi. Orkestrasi masih menggunakan bentuk Hentikan jika terjadi kesalahan sehingga orkestrasi dicatat sebagai dihentikan, bukan sebagai selesai tetapi dengan pesan kesalahan. Ini memungkinkan solusi untuk melacak instans yang gagal dengan mudah selain merekam kesalahan.
Untuk informasi selengkapnya tentang bentuk Hentikan , lihat Cara Mengonfigurasi Hentikan Bentuk. Untuk informasi selengkapnya tentang bentuk ThrowException , lihat Cara Mengonfigurasi Bentuk Pengecualian Lemparan.
Masing-masing dari tiga pengecualian kustom berikut mengikuti pola yang sama. Memiliki jenis yang berbeda memungkinkan kode untuk membedakan pengecualian yang berbeda.
Pengecualian | Dilemparkan Oleh (Orkestrasi) |
---|---|
ActivateException | Ubah |
CableOrderException | Aktifkan, CableOrder1 |
InterruptException | CableOrder1, CheckInterrupt, ErrorHandlerOrch |
Semua pengecualian kustom didefinisikan dalam perakitan Utilitas . Pengecualian kustom adalah semua kelas .NET. Semua kelas pengecualian kustom mewarisi dari kelas .NET ApplicationException yang pada gilirannya mewarisi dari kelas System.Exception . Karena ada kemungkinan bahwa pengecualian mungkin dehidrasi (diserialisasikan dan disimpan dalam database), pengecualian harus menerapkan konstruktor deserialisasi. Konstruktor deserialisasi adalah konstruktor yang mengambil dua argumen: objek SerializationInfo, dan objek StreamingContext. Konstruktor deserialisasi akan digunakan selama rehidrasi pengecualian. Karena kelas ApplicationException sudah menerapkan konstruktor deserialisasi, konstruktor untuk pengecualian kustom hanya memanggil konstruktor deserialisasi basis (ApplicationException). Misalnya, InterruptException menyertakan konstruktor berikut:
// "info" is the object holding the serialized object data.
// "context" is the contextual information about the source
// or destination.
public InterruptException(SerializationInfo info,
StreamingContext context) : base(info, context) { }
Untuk informasi selengkapnya tentang serialisasi kustom, lihat Serialisasi Kustom di Panduan pengembang .NET Framework.
Selain berfungsi sebagai pengecualian khusus, pengecualian kustom di beberapa tempat juga berfungsi sebagai bendera pengurutan. Dalam orkestrasi Ubah , ada dua tempat operasi Batalkan harus digulung balik.
Catatan
Anda mungkin ingin membaca bagian ini dengan orkestrasi Ubah terbuka di Visual Studio.
Di bagian atas orkestrasi, jika panggilan ke orkestrasi Batal gagal, blok CancelCompensation menjalankan dan mengembalikan transaksi Batalkan . Jika semua berjalan dengan baik, orkestrasi kemudian memanggil orkestrasi Aktifkan .
Jika operasi Aktifkan gagal, transaksi Batal juga harus digulung balik. Namun, handler pengecualian untuk panggilan ke Aktifkan tidak tahu apa-apa tentang transaksi Batalkan . Untuk menangani ini, ada handler pengecualian untuk seluruh orkestrasi. Handler ini, karena berisi cakupan Batal , mengetahui tentang transaksi Batalkan . Handler menangkap pengecualian yang dilemparkan dari cakupan Aktifkan ( ActivateException), mengembalikan transaksi Batal , lalu melemparkan pengecualian lagi sehingga orkestrasi yang disebut Orkestrasi perubahan dapat melakukan pemrosesan tambahan.
Perhatikan bahwa desain ini hanya mengimbangi Batal jika Aktifkan gagal. Jika Pembatalan gagal dan melempar pengecualian, Pembatalan tidak pernah terjadi dan tidak boleh dikompensasi.
Untuk informasi selengkapnya tentang blok kompensasi dan bentuk Kompensasi , lihat Cara Mengonfigurasi Bentuk Kompensasi.
Penanganan Pengecualian dalam Solusi Manajemen Proses Bisnis
Orkestrasi ExceptionHandler