Hiện tại chúng tôi đang tranh luận xem có nên ném lỗi qua kênh WCF hay không, so với thông báo cho biết trạng thái hoặc phản hồi từ dịch vụ.WCF - Lỗi/Ngoại lệ so với Thông báo
Lỗi đi kèm với sự hỗ trợ tích hợp từ WCF nơi bạn có thể sử dụng trình xử lý lỗi tích hợp và phản ứng tương ứng. Điều này, tuy nhiên, mang trên không như ném ngoại lệ trong. NET có thể khá tốn kém.
Tin nhắn có thể chứa thông tin cần thiết để xác định những gì đã xảy ra với cuộc gọi dịch vụ của bạn mà không phải trả phí ngoại lệ. Tuy nhiên nó cần một số dòng mã lặp lại để phân tích thông điệp và xác định các hành động theo nội dung của nó.
Chúng tôi mất một đâm vào việc tạo ra một đối tượng thông điệp chung chung chúng ta có thể sử dụng trong các dịch vụ của chúng tôi, và đây là những gì chúng tôi đã đưa ra:
public class ReturnItemDTO<T>
{
[DataMember]
public bool Success { get; set; }
[DataMember]
public string ErrorMessage { get; set; }
[DataMember]
public T Item { get; set; }
}
Nếu tất cả các cuộc gọi dịch vụ của tôi trở lại mặt hàng này, tôi luôn có thể kiểm tra thuộc tính "Thành công" để xác định xem mọi thứ có ổn không. Sau đó, tôi có một chuỗi thông báo lỗi trong sự kiện cho biết đã xảy ra sự cố và một mục chung chứa Dto nếu cần.
Thông tin ngoại lệ sẽ phải được đăng xuất khỏi dịch vụ ghi nhật ký trung tâm và không được chuyển trả lại từ dịch vụ.
Suy nghĩ? Bình luận? Ý tưởng? Gợi ý?
Một số rõ hơn về câu hỏi của tôi
Một vấn đề tôi đang gặp với hợp đồng lỗi được trao đổi quy tắc kinh doanh.
Giống như, nếu ai đó đăng nhập và tài khoản của họ bị khóa, tôi làm cách nào để liên lạc? Đăng nhập của họ rõ ràng là không thành công, nhưng nó không thành công vì lý do "tài khoản bị khóa".
Vì vậy, làm tôi:
A) sử dụng một boolean, ném lỗi với tài khoản nhắn tin bị khóa
B) trở AuthenticatedDTO với thông tin liên quan
Tôi không đồng ý. Vì WCF được coi là không thuyết phục về ngôn ngữ (ít nhất là ở một dạng nào đó), bạn không thể đảm bảo rằng việc truyền một đối tượng ngoại lệ xuống dây sẽ không gây ra vấn đề về buig ví dụ. Khách hàng Java. Loại đối tượng FaultContract có thể đảm bảo khả năng tương tác vì nó là một phần của thông số kỹ thuật OASIS. – ZombieSheep
.NET dịch ngoại lệ sang các hợp đồng Lỗi. Xem liên kết tôi đã thêm vào câu trả lời của mình. –
Tôi đã luôn luôn ấn tượng rằng ném một ngoại lệ mang chi phí không cần thiết. Từ bài viết của bạn, tôi dường như đã được sai lầm sai lầm. Trước khi tôi đánh dấu bài đăng này là asnwer, tôi muốn nhận thêm một số ý kiến. Nhưng xem xét đầu vào của bạn, có vẻ như hợp đồng lỗi là lựa chọn tốt hơn – WebDude