Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Sampel ExpectedExceptions menunjukkan cara menangkap pengecualian yang diharapkan saat menggunakan klien yang diketik. Sampel ini didasarkan pada Memulai yang mengimplementasikan layanan kalkulator. Dalam sampel ini, klien adalah aplikasi konsol (.exe) dan layanan dihosting oleh Internet Information Services (IIS).
Nota
Prosedur penyiapan dan instruksi build untuk sampel ini terletak di akhir topik ini.
Sampel ini menunjukkan penangkapan dan penanganan dua jenis pengecualian yang diharapkan yang harus ditangani program yang benar: TimeoutException dan CommunicationException.
Pengecualian yang muncul dari metode komunikasi di dalam klien Windows Communication Foundation (WCF) bisa diperkirakan atau tidak diperkirakan. Pengecualian tak terduga termasuk kegagalan bencana seperti OutOfMemoryException dan kesalahan pemrograman seperti ArgumentNullException atau InvalidOperationException. Biasanya tidak ada cara yang berguna untuk menangani kesalahan tak terduga, jadi biasanya Anda tidak boleh menangkapnya saat memanggil metode komunikasi klien WCF.
Pengecualian yang diharapkan dari metode komunikasi pada klien WCF meliputi TimeoutException, , CommunicationExceptiondan kelas turunan dari CommunicationException. Ini menunjukkan masalah selama komunikasi yang dapat ditangani dengan aman dengan membatalkan klien WCF dan melaporkan kegagalan komunikasi. Karena faktor eksternal dapat menyebabkan kesalahan ini dalam aplikasi apa pun, aplikasi yang benar harus menangkap pengecualian ini dan pulih ketika terjadi.
Ada beberapa kelas turunan dari CommunicationException yang dapat dilemparkan oleh klien. Dalam beberapa kasus, aplikasi juga menangkap beberapa dari ini untuk melakukan penanganan khusus, tetapi membiarkan yang lainnya ditangani sebagai CommunicationException. Ini dapat dicapai dengan menangkap jenis pengecualian yang lebih khusus terlebih dahulu dan kemudian menangkap CommunicationException dalam blok penanganan pengecualian selanjutnya.
Kode yang memanggil metode komunikasi klien harus menangkap TimeoutException dan CommunicationException. Salah satu cara untuk menangani kesalahan tersebut adalah dengan membatalkan klien dan melaporkan kegagalan komunikasi.
try
{
...
double result = client.Add(value1, value2);
...
client.Close();
}
catch (TimeoutException exception)
{
Console.WriteLine("Got {0}", exception.GetType());
client.Abort();
}
catch (CommunicationException exception)
{
Console.WriteLine("Got {0}", exception.GetType());
client.Abort();
}
Jika pengecualian yang diharapkan terjadi, klien mungkin atau mungkin tidak dapat digunakan setelahnya. Untuk menentukan apakah klien masih dapat digunakan, periksa bahwa properti State adalah CommunicationState. Dibuka. Jika masih dibuka, maka masih dapat digunakan. Jika tidak, Anda harus membatalkan klien dan merilis semua referensi ke klien tersebut.
Perhatian
Anda dapat mengamati bahwa klien yang memiliki sesi sering kali tidak lagi dapat digunakan setelah pengecualian, dan klien yang tidak memiliki sesi sering kali masih dapat digunakan setelah pengecualian. Namun, tidak satu pun dari ini dijamin, jadi jika Anda ingin mencoba untuk terus menggunakan klien setelah pengecualian aplikasi Anda harus memeriksa State properti untuk memverifikasi bahwa klien masih dibuka.
Saat Anda menjalankan sampel, respons dan pengecualian operasi ditampilkan di jendela konsol klien.
Proses klien menjalankan dua skenario, yang masing-masing mencoba memanggil Add diikuti oleh Divide. Skenario pertama mensimulasikan masalah jaringan dengan membatalkan klien sebelum melakukan panggilan ke Divide. Skenario kedua menyebabkan kondisi batas waktu habis dengan mengatur batas waktu terlalu singkat sehingga metode tidak dapat selesai dengan baik. Output yang diharapkan dari proses klien adalah:
Add(100,15.99) = 115.99
Simulated network problem occurs...
Got System.ServiceModel.CommunicationObjectAbortedException
Add(100,15.99) = 115.99
Set timeout too short for method to complete...
Got System.TimeoutException
Untuk menyiapkan, mengompilasi, dan menjalankan sampel
Pastikan Anda telah melakukan Prosedur Penyiapan One-Time untuk Sampel Windows Communication Foundation.
Untuk membangun solusi edisi C# atau Visual Basic .NET, ikuti instruksi di Membangun Sampel Windows Communication Foundation.
Untuk menjalankan sampel dalam konfigurasi satu atau lintas komputer, ikuti instruksi di Menjalankan Sampel Windows Communication Foundation.