2012-02-19 19 views
6

Mamy rolę roboczą Azure, która wykonuje bardzo asynchroniczne obciążenie, z dużą ilością uzupełnień dotyczących wątków IO i tym podobnych.Zapobieganie nieobsługiwanym wyjątkom przed zniszczeniem roli pracownika Azure

Czasami nieobsłużone wyjątki występują w asynchronicznych wywołaniach zwrotnych, których nie posiadamy. To z kolei powoduje niepowodzenie roli.

W Azure spoza aplikacji ASP.NET, możemy tego uniknąć poprzez umożliwienie starszego nieobsługiwany wyjątek w politykę aspnet.config tak:

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

Czy istnieje sposób, aby zrobić to samo dla pracownika Azure rola? Podjęliśmy próbę umieszczenia tego w app.config dla projektu roli, ale to nie zadziałało (ponieważ prawdopodobnie musimy jakoś przekazać to do pliku WaWorkerHost.exe.config).

Jesteśmy świadomi AppDomain.CurrentDomain.UnhandledException i Application.SetUnhandledExceptionMode i How to catch an unhandled exception in Windows Azure (Worker) Role, a te nie rozwiązują naszego problemu.

+0

Nadal szukasz odpowiedzi! Proszę, zadzwoń. – ionwarp

Odpowiedz

0

Po prostu przeczytaj swoją nić, ponieważ doświadczam tego samego z Webrolem. Teraz dodałem Twój fragment kodu i sprawdź, czy ponownie napotkam ten błąd. Czy niektóre badania dotyczące klasy AppDomain: http://msdn.microsoft.com/en-us/library/system.appdomain.aspx. W rzeczywistości szukałem nieobsługiwanych zasad wyjątków, ale ich nie znalazłem. Ale znalazłem wydarzenie "UnhandledException" http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx.

Ale napisałeś, że to nie działa. Powoduje to, że również później to przebiję - poprowadzę zewnętrzny komponent open source w roli lazurowego pracownika - przeprowadziłem pewne badania.

Spróbuję stworzyć nową AppDomain dla trzeciego kodu pary - a jeśli wystąpi wyjątek, spowoduje to awarię/wyładowanie nowo utworzonej domeny AppDomain, a nie aktualny, w którym uruchamiam kod. Innym rozwiązaniem byłoby prawdopodobnie utworzenie nowy proces, który, jak sądzę, wymaga więcej pracy.

EDYTOWANIE: Powróciłem do tego tematu: w wersji 2.0 został wprowadzony w celu oderwania domeny aplikacji w przypadku, gdy wątek (nie główny wątek) wystąpi błąd w bibliotece klas. Wygląda na to, że nawet oddzielna ApplicationDomain nie pomoże. Jak zrozumiałem, ten projekt powinien pomóc w debugowaniu błędów ukrytych w bibliotekach przez wyjątki catch na poziomie biblioteki i odpowiednio je obsłużyć. Ale co mnie irytuje - co się stanie, jeśli użyjemy bibliotek klas trzecich, nad którymi nie mamy kontroli? Potem wydaje się, że utknęliśmy, jeśli nasz problem jest zbyt mały, aby sprzedawca mógł go rozwiązać w wymaganym dla nas czasie.

+0

Marc, szukam lepszej odpowiedzi, jeśli to możliwe, takiej, która nie wymaga zarządzania aplikacjami (nie jest to pożądane, abyśmy utracili stan aplikacji, gdy zostanie zburzona) lub tworzenia własnego procesu. – ionwarp

Powiązane problemy