2

私の azure webjob は、例外をスローせずに終了しているように見え、迷ってしまいます。

Web ジョブはオンデマンド (またはスケジュール) で実行され、Web サイト DLL (および MVC アプリ) に依存しています。これを呼び出して、エンティティ フレームワーク データベースの操作や他のいくつかのサイトへの REST 呼び出しなど、ほとんどの作業を行います。ほとんどの作業は非同期で行われます。この作業を行うために使用されるコードのほとんどは、問題なくサイトの他の部分からも呼び出されます。言うまでもなく、Web ジョブはローカルで実行すると問題なく動作します。

Web ジョブは終了し、終了しても例外がスローされないようであり、継続的に実行される種類 (?) ではない Web をデバッグすることはできないようです。そのため、私のデバッグは主に Console.WriteLine の種類のものでした。それと非同期性のため、クラッシュしている場所を正確に突き止めることができませんでした-データベースへのアクセス中に発生したと思っていましたが、それをいじった後、データベースへのアクセスが機能し始めました..うーん。私の次善の策は、待機中またはその他の非同期配管中に死ぬことです。ただし、最終的に結果を redis と Azure ストレージに記録する 2 つの try/catch ブロック内でクラッシュします。それは起こりません。例外ハンドラにヒットせずにこのプロセスがどのようにクラッシュするかを理解または想像することはできません..?

Azure Webjobでこの問題が発生した人はいますか? 何を探すべきか、これをデバッグするためのヒントはありますか?

ありがとう!

4

1 に答える 1

4

私はそれを考え出した!非同期で行われる多くの処理の 1 つは、証明書の作成です。私はそれをこれまでたどりました:

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

このコードは、Azure Web サイトまたはテストから呼び出すと正常に動作しますが、例外をスローすることなく Web ジョブ プロセスを完全に強制終了します。たとえば、以下の例外ハンドラの 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);
于 2014-12-16T00:57:47.387 に答える