Tôi có một ứng dụng Silverlight 2 đang sử dụng dịch vụ WCF. Như vậy, nó sử dụng các cuộc gọi lại không đồng bộ cho tất cả các cuộc gọi đến các phương thức của dịch vụ. Nếu dịch vụ không chạy hoặc bị treo hoặc mạng bị trục trặc, vv trước hoặc trong một trong các cuộc gọi này, ngoại lệ được tạo như bạn mong đợi. Vấn đề là, tôi không biết cách bắt ngoại lệ này.Cách tốt nhất để bắt ngoại lệ WCF trong Silverlight là gì?
Vì đây là cuộc gọi không đồng bộ, tôi không thể kết thúc cuộc gọi bắt đầu bằng khối try/catch và nhận ngoại lệ sau khi chương trình đã chuyển từ điểm đó.
Vì proxy dịch vụ được tạo tự động, tôi không thể đặt khối try/catch trên mỗi và mọi hàm được tạo gọi EndInvoke (nơi ngoại lệ thực sự xuất hiện). Các hàm được tạo này cũng được bao quanh bởi Mã ngoài trong ngăn xếp cuộc gọi, vì vậy không có nơi nào khác trong ngăn xếp để đặt thử/bắt.
Tôi không thể đặt thử/nắm bắt trong các hàm gọi lại của mình, vì ngoại lệ xảy ra trước khi chúng được gọi.
Có một hàm Application_UnhandledException trong App.xaml.cs của tôi, nó nắm bắt tất cả các ngoại lệ chưa được xử lý. Tôi có thể sử dụng điều này, nhưng nó có vẻ như một cách lộn xộn để làm điều đó. Tôi muốn dành chức năng này cho các lỗi thực sự bất ngờ (hay còn gọi là lỗi) và không kết thúc bằng mã trong hàm này cho mọi hoàn cảnh mà tôi muốn giải quyết theo một cách cụ thể.
Tôi có thiếu giải pháp rõ ràng không? Hoặc tôi bị mắc kẹt bằng cách sử dụng Application_UnhandledException?
[Chỉnh sửa]
Như đã đề cập bên dưới, thuộc tính Lỗi chính xác là những gì tôi đang tìm kiếm. Điều gì đang ném tôi cho một vòng lặp là một thực tế là ngoại lệ được ném và dường như không bị bắt, nhưng thực hiện có thể tiếp tục. Nó kích hoạt sự kiện Application_UnhandledException và làm cho VS2008 phá vỡ việc thực hiện, nhưng việc tiếp tục trong trình gỡ rối cho phép thực hiện tiếp tục. Nó không thực sự là một vấn đề, nó chỉ có vẻ kỳ quặc.
Chỉ cần làm rõ, "gọi lại phương thức dịch vụ" nghĩa là sự kiện đã hoàn thành phương thức, không phải là gọi lại. Gọi lại được sử dụng với APM, trong khi Silverlight sử dụng EAP. –
Đồng ý. Cập nhật cho phù hợp. – dcstraw