Bagikan melalui


Penanganan Kesalahan (RPC)

Dalam RPC sinkron, klien melakukan panggilan jarak jauh yang kembali dengan kode keberhasilan atau kegagalan. RPC asinkron memberikan lebih banyak peluang untuk panggilan gagal, dan kegagalan ini ditangani secara berbeda, tergantung di mana dan kapan terjadinya. Tabel berikut ini menjelaskan cara panggilan bisa gagal, dan bagaimana panggilan ditangani.

Pembersihan Sisi Klien

Gejala kegagalan Pembersihan
Klien menangkap pengecualian ketika memanggil prosedur jarak jauh. Tidak diperlukan panggilan API RPC. Semua status RPC telah dibersihkan.
Klien menerima pemberitahuan panggilan lengkap, tetapi ketika memanggil RpcAsyncCompleteCall, klien menerima kode kesalahan. Tidak diperlukan panggilan API RPC. Semua status RPC telah dibersihkan.
Masalah klien pembatalan non-abortif atau abortif. Klien harus menunggu pemberitahuan, dan memanggil RpcAsyncCompleteCall saat pemberitahuan tiba.

 

Dalam pembersihan sisi server, konsep utama adalah titik hand-off. Selama pemrosesan sisi server dari panggilan asinkron, beberapa pemrosesan biasanya dilakukan pada utas yang menerima panggilan (juga dikenal sebagai utas dispatcher), dan kemudian, secara opsional, utas dispatcher menempatkan status yang cukup ke dalam blok memori dan memberi sinyal utas lain (juga dikenal sebagai utas pekerja) untuk terus memproses panggilan. Momen di mana utas dispatcher berhasil menandakan bahwa utas pekerja disebut titik hand-off.

Pembersihan Sisi Server

Terjadi kesalahan Pembersihan
Sebelum titik hand-off. Lempar pengecualian. Tidak diperlukan panggilan ke RpcAsyncCompleteCall .
Setelah titik hand-off. Panggil RpcAsyncAbortCall atau, jika kesalahan tidak fatal dan hasilnya masih dapat dikembalikan ke klien, RpcAsyncCompleteCall. Jika panggilan fungsi RpcAsyncCompleteCall gagal, runtime RPC membebaskan parameter. Pengguna tidak boleh mengakses parameter tersebut. Utas dispatcher tidak boleh melakukan pemrosesan substansial yang mungkin gagal setelah titik lepas tangan, karena tidak lagi dapat membatalkan panggilan dengan aman. Secara khusus, itu tidak boleh melemparkan pengecualian setelah titik lepas tangan, atau server mungkin crash.

 

Kasus Penanganan Kesalahan Khusus untuk Pipa

Ada kasus khusus untuk penanganan kesalahan saat menggunakan pipa. Daftar berikut menjelaskan sumber kegagalan, dan cara menangani kesalahan.

Sumber kegagalan Cara penanganan
Panggilan klien mendorong dan panggilan gagal. Tidak diperlukan panggilan API RPC. Semua status RPC telah dibersihkan.
Klien memanggil RpcAsyncCompleteCall sebelum pipa dalam dikosongkan. Panggilan gagal dengan kode kesalahan pengisian pipa yang sesuai.
Panggilan klien menarik dan panggilan gagal. Tidak diperlukan panggilan API RPC. Semua status RPC telah dibersihkan.
Panggilan klien atau server mendorong atau menarik dalam urutan yang salah. Run-time mengembalikan status kesalahan pengisian pipa.
Panggilan server mendorong atau menarik dan panggilan gagal. Push mengembalikan kode kegagalan. Tidak diperlukan panggilan ke RpcAsyncCompleteCall .
Server memanggil RpcAsyncCompleteCall sebelum pipa dikosongkan. Panggilan pipa mengembalikan status kesalahan pengisian pipa.
Setelah pengiriman, operasi penerima gagal. Lain kali server memanggil tarik untuk menerima data pipa, kesalahan dikembalikan.