Vâng, có những trường hợp ngoại lệ 'chuẩn' trong trường hợp này và ngoại lệ 'tùy chỉnh' (các nhà phát triển dịch vụ xác định là FaultContact
s và có trong tham chiếu hợp đồng dịch vụ).
Trong trường hợp đầu tiên, các mối quan tâm của bạn, tôi giả sử là CommunicationException
và TimeoutException
; đây là những ngoại lệ có thể được ghi lại cho các phương thức ICommunicationObject.BeginOpen
và các phương thức 'mở' khác là ICommunicationObject
(số base of the model). CommunicationObjectFaultedException
được ghi lại cho phương pháp 'đóng'. Ngoài ra còn có QuotaExceededException
cho các phương thức gửi tin nhắn, chẳng hạn như IRequestChannel.Request
. Trong số many more that might be, chúng có thể được phát hiện.
Cần lưu ý, từ một bài viết MSDN liên kết ở trên, là thế này:
Tất cả các trường hợp ngoại lệ ném bởi các kênh truyền hình phải là một System.TimeoutException
, System.ServiceModel.CommunicationException
, hoặc một loại có nguồn gốc từ CommunicationException. (Trường hợp ngoại lệ như ObjectDisposedException cũng có thể được ném, nhưng chỉ để cho biết rằng mã gọi đã lạm dụng kênh. Nếu một kênh được sử dụng một cách chính xác, nó chỉ phải ném những ngoại lệ nhất định.)
Sau đó là 'Lỗi', là ngoại lệ được nêu lên ở phía dịch vụ và (có khả năng, nếu được bật) được chi tiết cho người gọi, sau đó người gọi có thể xử lý hoặc ném ngoại lệ phía máy khách thích hợp:
Khi tạo lỗi, kênh tùy chỉnh không được gửi trực tiếp lỗi , đúng hơn là hrow một ngoại lệ và để cho các lớp trên quyết định có nên chuyển đổi ngoại lệ đó thành lỗi hay không và cách gửi nó.
Kênh State
cung cấp sự kiện Faulted
mà bạn có thể đăng ký để được thông báo khi đạt đến trạng thái như vậy và có thể hành động. Theo mặc định (không có cấu hình sự áp đảo (?)) Các lỗi sẽ được nâng lên như các ngoại lệ được quản lý; một lần nữa, để nhắc lại:
Trong khách hàng WCF, lỗi SOAP xảy ra trong khi giao tiếp là quan tâm đến ứng dụng của khách hàng được nêu như ngoại lệ được quản lý. Mặc dù có nhiều ngoại lệ có thể xảy ra trong khi thực hiện bất kỳ chương trình nào, các ứng dụng sử dụng mô hình lập trình khách hàng WCF có thể mong đợi xử lý ngoại lệ của [...] hai loại kết quả của giao tiếp .
Và this refers again đến CommunicationException
và TimeoutException
được đề cập ở trên.
Cuối cùng, bây giờ ít nhất, là bất ngờ:
FaultException
hợp ngoại lệ được ném ra khi một người nghe nhận được một lỗi không được dự kiến hoặc ghi trong hợp đồng hoạt động; thường là điều này xảy ra khi ứng dụng đang được gỡ lỗi và dịch vụ có thuộc tính System.ServiceModel.Description.ServiceDebugBehavior.IncludeExceptionDetailInFaults
được đặt thành true.
cảm ơn liên kết. Tôi biết làm thế nào để khác biệt giữa các trường hợp ngoại lệ cần được nắm bắt và ngoại lệ mà nên bong bóng mặc dù - Do đó câu hỏi này. Tuy nhiên, mã được tạo không có bất kỳ /// thẻ hoặc bất kỳ điều gì gợi ý về những ngoại lệ nào có thể bị ném. –
vidstige
Kiểm tra [Chủ đề] sau [1] [1]: http://stackoverflow.com/questions/264747/finding-out-what-exceptions-a-method-might-throw-in- c-sharp – Tomtom