2014-12-15 4 views
2

Мой лазурный webjob, кажется, заканчивается, не бросая исключение, и я теряюсь.Почему мой веб-сайт заканчивается без исключения?

Моя работа в Интернете выполняется по требованию (или по расписанию) и зависит от моего DLL-библиотеки (и приложения MVC). Он призывает к выполнению большей части работы, которая включает работу с базой данных сущностей и вызовы REST на несколько других сайтов. Большая часть работы выполняется асинхронно. Большая часть кода, используемого для выполнения этой работы, также вызывается из других частей сайта без проблем, и само собой разумеется, что веб-работа работает безупречно при локальном запуске.

Веб-задание завершается и, кажется, не генерирует исключения, когда это происходит, и не представляется возможным отлаживать веб-сайт, который не имеет непрерывного разнообразия (?). Поэтому моя отладка в основном относится к разновидности Console.WriteLine. Из-за этого и асинхроничности я не смог точно определить, где он сбой - я думал, что это происходит при доступе к базе данных, но после того, как он удалился, доступ к базе данных начал работать. В следующий раз я думаю, что он умирает во время ожидания или другого асинхронного водопровода. Тем не менее, он падает в двух блоках try/catch, которые имеют окончательные результаты, которые приводят к редизайну и лазурному хранению. Ничего из этого не происходит. Я не могу понять или представить, как этот процесс рушится, не удаляя обработчики исключений ..?

У кого-нибудь была эта проблема с лазурным webjob? Любая идея, что я должен искать, или какие-либо советы по ее отладке?

Спасибо!

+1

Вы используете 'async void'? –

+0

Можете ли вы, пожалуйста, поделиться с нами кодом? –

+0

Подпись метода, который я вызываю из процесса веб-задания: public async Задача GenerateFeed (bool dryRun = false) –

ответ

3

Я понял! Одним из многих событий, происходящих асинхронно, было создание сертификата. Я проследил его к этому:

signedCert = new X509Certificate2(cert, "notasecret", X509KeyStorageFlags.Exportable); 

Этот код прекрасно работает при вызове из моего сайта лазурного или моих тестах, но полностью убивает процесс webjob не бросать исключение! Например, WriteLine в обработчик исключений ниже никогда не вызывается:

X509Certificate2 signedCert; 
try 
{ 
    signedCert = new X509Certificate2(cert, "notasecret", X509KeyStorageFlags.Exportable); 
} 
catch (Exception ex) 
{ 
    // We never get here! Argh! 
    Console.WriteLine("Exception converting cert: " + ex);     
    throw; 
} 

Очень много времени и разочарований. В отличие от диагноза, исправление прост:

signedCert = new X509Certificate2(
    cert, 
    "notasecret", 
    X509KeyStorageFlags.Exportable | 
    X509KeyStorageFlags.MachineKeySet | 
    X509KeyStorageFlags.PersistKeySet);