WCF - Xử lý ngoại lệ

Nhà phát triển dịch vụ WCF có thể gặp phải một số lỗi không lường trước được yêu cầu báo cáo cho khách hàng theo cách phù hợp. Những lỗi như vậy, được gọi làexceptions, thường được xử lý bằng cách sử dụng khối try / catch, nhưng một lần nữa, đây là công nghệ rất cụ thể.

Vì khu vực quan tâm của khách hàng không phải về cách xảy ra lỗi hoặc các yếu tố gây ra lỗi, hợp đồng SOAP Fault được sử dụng để truyền thông báo lỗi từ dịch vụ đến máy khách trong WCF.

Hợp đồng lỗi cho phép khách hàng xem dạng văn bản về các lỗi xảy ra trong một dịch vụ. Ví dụ sau đây cho bạn hiểu rõ hơn.

Step 1 - Một dịch vụ máy tính dễ dàng được tạo ra với phép toán chia sẽ tạo ra các ngoại lệ chung.

using System;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Runtime.Serialization;
usingSystem.ServiceModel;
usingSystem.Text;

namespace Calculator {
   // NOTE: You can use the "Rename" command on the "Refactor" menu to change 
   // the interface name "IService1" in both code and config file together.
   
   [ServiceContract]
   
   public interface IService1 {
      [OperationContract]
      int divide(int num1, int num2);
      // TODO: Add your service operations here
   }
}

Mã hóa cho tệp lớp được hiển thị bên dưới:

Bây giờ, khi chúng ta cố gắng chia số 10 cho số 0, dịch vụ máy tính sẽ đưa ra một ngoại lệ.

Ngoại lệ có thể được xử lý bằng khối try / catch.

Bây giờ, khi chúng ta cố gắng chia bất kỳ số nguyên nào cho 0, nó sẽ trả về giá trị 10 vì chúng ta đã xử lý nó trong khối catch.

Step 2 - FaultException được sử dụng trong bước này để truyền thông tin ngoại lệ cho máy khách từ dịch vụ.

public int Divide(int num1, int num2) { 
   //Do something 
   throw new FaultException("Error while dividing number"); 
}

Step 3- Cũng có thể tạo một kiểu tùy chỉnh để gửi thông báo lỗi bằng FaultContract. Các bước cần thiết để tạo một loại tùy chỉnh được đề cập bên dưới:

Một kiểu được xác định bằng cách sử dụng hợp đồng dữ liệu và các trường dự định trả về được chỉ định.

Hoạt động dịch vụ được trang trí bởi thuộc tính FaultContract. Tên loại cũng được chỉ định.

Một cá thể dịch vụ được tạo ra để nâng cao các ngoại lệ và các thuộc tính ngoại lệ tùy chỉnh được chỉ định.