Tôi có dịch vụ WCF được định cấu hình để sử dụng xác thực UserName tùy chỉnh thông qua phương thức Validate() được ghi đè của lớp System.IdentityModel.Selectors.UserNamePasswordValidator.WCF UserName xác thực và các hợp đồng lỗi
Tất cả các phương thức của hợp đồng đã được trang trí với FaultContractAttribute để chỉ định lỗi SOAP tùy chỉnh là có thể trả lại.
Khi ném FaultException <T>, trong đó T là loại được chỉ định trong FaultContractAttribute, mọi thứ hoạt động như mong đợi và tôi nhận được lỗi tùy chỉnh trong XML phản hồi.
Tuy nhiên, nếu tôi cố gắng và ném FaultException <T> trong phương pháp overriden Validate() của lớp xác thực username, tôi nhận được một lỗi SOAP chung với lý do sau:
"Các tác giả của lỗi này đã không chỉ định Lý do. "
Tuy nhiên, nếu tôi thay đổi mã để ném lỗi SOAP chung như trong:
throw new FaultException("Authentication failed.");
tôi ít nhất sẽ nhận được "Xác thực không thành." trong yếu tố lý do.
Câu hỏi của tôi là:
- Tại sao không phải là FaultException <T> trường hợp ngoại lệ đối xử như nhau nếu họ đang ném vào Validate() khi họ nằm trong việc thực hiện dịch vụ?
- Có thể có ngoại lệ được ném trong phương thức Validate() phù hợp với FaultContractAttribute được chỉ định trên phương thức hợp đồng không?
Bất kỳ trợ giúp nào được đánh giá cao. Đoán của tôi là xác thực xuất hiện trước khi thông báo được liên kết với bất kỳ phương thức nào của hợp đồng, và do đó, không được liên kết với FaultContractAttribute, nhưng bất kỳ bài viết nào xác nhận điều này và đưa ra cách giải quyết sẽ rất hữu ích.
Tali
Cảm ơn bạn đã đăng câu hỏi này. Bất kỳ giải pháp? Tôi vẫn đang tìm kiếm câu trả lời vào tháng 3 năm 2013. –