2012-04-18 45 views
9

Tôi đã thêm một dịch vụ web trong Visual Studio 2010 bằng cách sử dụng "Thêm tham chiếu dịch vụ ...". Điều này tạo ra một số mã trong một tệp gọi là Reference.cs. Bây giờ, nếu tôi gọi một trong những phương pháp tôi không biết những gì ngoại lệ phương pháp có thể ném. Có lẽ nó có thể ném ngoại lệ liên quan đến mạng như SocketException hoặc IOException?Những ngoại lệ nào có thể tạo ra một tham chiếu dịch vụ được tạo ra?

Các phương pháp thông thường trong .NET có thể được kiểm tra trên msdn hoặc bên trong mã nguồn để tiết lộ những ngoại lệ nào có thể bị ném, ví dụ như File.Open. Ở đây rõ ràng những gì ngoại lệ tôi nên bắt và rethrow để hiển thị thông báo lỗi ở giai đoạn sau.

Đối với những phương pháp được tạo, làm cách nào tôi có thể biết ngoại lệ nào họ có thể ném?

+0

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

+0

Kiểm tra [Chủ đề] sau [1] [1]: http://stackoverflow.com/questions/264747/finding-out-what-exceptions-a-method-might-throw-in- c-sharp – Tomtom

Trả lời

14

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à CommunicationExceptionTimeoutException; đâ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 .

this refers again đến CommunicationExceptionTimeoutException đượ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.

+0

câu trả lời tuyệt vời với tài liệu tham khảo và tất cả! Thực sự thích trích dẫn đầu tiên. Hoàn toàn trả lời câu hỏi của tôi - Tôi nên bắt CommunicationException và để cho phần còn lại bong bóng thông qua kể từ khi họ chỉ ra tôi (hoặc mã được tạo ra) sử dụng các phương pháp kênh không chính xác. – vidstige

Các vấn đề liên quan