2012-02-19 22 views
6

Chúng tôi có vai trò công nhân Azure chạy khối lượng công việc không đồng bộ nhiều, với nhiều lần hoàn thành trên chuỗi IO và tương tự.Ngăn chặn ngoại lệ không được giải quyết từ việc rớt xuống vai trò công nhân Azure

Thỉnh thoảng, các ngoại lệ không được xử lý xảy ra trên các cuộc gọi lại không đồng bộ mà chúng tôi không sở hữu. Điều này sẽ làm cho vai trò thất bại.

Trong phi Azure ứng dụng ASP.NET, chúng ta có thể tránh điều này bằng cách cho phép các chính sách ngoại lệ unhandled kế thừa trong aspnet.config như thế này:

<configuration> 
    <runtime> 
    <legacyUnhandledExceptionPolicy enabled="1" /> 
    <runtime> 
<configuration> 

Có cách nào để làm tương tự cho người lao động Azure vai trò? Chúng tôi đã cố gắng đặt điều này trong app.config cho dự án vai trò, nhưng điều đó không làm việc (vì chúng ta có thể phải đưa nó vào WaWorkerHost.exe.config bằng cách nào đó).

Chúng tôi biết về AppDomain.CurrentDomain.UnhandledExceptionApplication.SetUnhandledExceptionModeHow to catch an unhandled exception in Windows Azure (Worker) Role và những điều này không giải quyết được vấn đề của chúng tôi.

+0

Vẫn đang tìm kiếm câu trả lời! Xin vui lòng kêu vang. – ionwarp

Trả lời

0

Chỉ cần đọc chủ đề của bạn, vì tôi trải nghiệm tương tự với webrole. Bây giờ tôi đã thêm đoạn mã của bạn và kiểm tra xem tôi có gặp lại lỗi này không. Đã thực hiện một số nghiên cứu về lớp AppDomain: http://msdn.microsoft.com/en-us/library/system.appdomain.aspx. Như một vấn đề của thực tế, tôi đã tìm kiếm các chính sách ngoại lệ unhandled nhưng đã không tìm thấy nó. Nhưng tôi đã tìm thấy sự kiện "UnhandledException" http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx.

Nhưng bạn đã viết lệnh này không hoạt động. Bởi vì điều này sẽ đánh tôi sau này - Tôi sẽ chạy một thành phần nguồn mở bên thứ 3 trong vai trò công nhân xanh - tôi đã làm một số nghiên cứu.

Tôi sẽ cố gắng tạo một AppDomain mới cho mã trang thứ 3 - và nếu một ngoại lệ xảy ra, nó sẽ sụp đổ/dỡ bỏ AppDomain mới được tạo ra và không phải hiện tại tôi đang chạy mã. Một giải pháp khác có thể sẽ tạo quá trình mới, đó là tôi giả sử nhiều công việc hơn.

EDIT: Tôi xem lại chủ đề này: trong phiên bản 2.0, nó đã được giới thiệu để phá bỏ miền ứng dụng trong trường hợp một luồng (không phải chuỗi chính) gặp lỗi trong thư viện lớp. Có vẻ như ngay cả một ApplicationDomain riêng biệt sẽ không giúp đỡ. Theo tôi hiểu thiết kế này sẽ giúp gỡ lỗi các lỗi ẩn trong thư viện bằng cách bắt ngoại lệ ở cấp thư viện và xử lý chúng một cách thích hợp. Nhưng điều gì làm tôi khó chịu - điều gì sẽ xảy ra nếu chúng tôi sử dụng thư viện lớp 3 mà chúng tôi không kiểm soát? Sau đó, có vẻ như chúng tôi đang bị mắc kẹt nếu vấn đề của chúng tôi là nhỏ cho các nhà cung cấp để giải quyết nó trong thời gian cần thiết cho chúng tôi.

+0

Marc, tôi đang tìm kiếm một câu trả lời tốt hơn nếu có thể, một câu hỏi không yêu cầu quản lý appdomains (không mong muốn chúng ta mất trạng thái appdomain khi nó bị rách), hoặc tạo quy trình riêng. – ionwarp

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