Trong lớp khách hàng WCF của tôi, tôi đang xử lý sự kiện Faulted()
để nếu dịch vụ từ xa ném một ngoại lệ và lỗi thì kênh tôi vẫn có thể tắt ít nhất một cách duyên dáng. Dưới đây là mã của tôi:System.ServiceModel.Diagnostics.CallbackException là gì và tại sao tôi không thể xử lý nó?
protected void RemoteDataRetriever_Faulted(object sender, EventArgs e)
{
(sender as ICommunicationObject).Abort();
this.Dispose();
throw new ChannelTerminatedException("The remote service threw an unhandled exception and as a result the channel has been closed.");
}
Vì vậy, những gì tôi mong đợi là các khách hàng có thể xử lý các ChannelTerminatedException
mà tôi đã ném bằng tay và gửi một thông điệp tới người sử dụng, vv Thay vì ngoại lệ của tôi là nhận được bọc trong một System.ServiceModel.Diagnostics.CallbackException
. Ok, được rồi. Ngoại trừ đây là bắt: CallbackException này không tồn tại trong thư viện ServiceModel và dường như không có cách nào để tôi xử lý nó ngoại trừ một số chung chung Exception
, điều này làm tôi không tốt cho các bài kiểm tra đơn vị của mình. Cái quái gì đang xảy ra ở đây? Tôi có thể vô hiệu hóa bằng cách nào đó và ném ngoại lệ mà ban đầu tôi muốn không?
Vì bạn đang tự ném ngoại lệ, bạn có thể sử dụng một ngoại lệ khác không bị gói không? Tôi đang suy nghĩ một cái gì đó mà không phơi bày thực tế là bạn đang sử dụng WCF bên dưới tất cả ... –
Không có súc sắc. Tôi đã thay đổi ChannelTerminatedException thành một StackOverflowException ;-) và nó vẫn nhận được gói trong đó CallbackException gây phiền nhiễu (một trong tôi ném kết thúc lên là ngoại lệ bên trong). Và sau đó nó đưa ra thông điệp gây phiền nhiễu: "Một cuộc gọi lại của người dùng đã ném một ngoại lệ. Kiểm tra ngăn xếp ngoại lệ và ngoại lệ bên trong để xác định cuộc gọi lại không thành công". Có, tôi biết gọi lại đã ném một ngoại lệ! Tôi là người đã ném nó! Tôi sẽ làm nghiên cứu nhiều hơn và xem nếu có một cờ WCF/tham số một nơi nào đó mà tôi có thể sử dụng để vô hiệu hóa hành vi này. –