3

Azure で Web ジョブを作成しました。Web ジョブは、継続的に実行されるタイプです。キューにメッセージがある場合に呼び出される Web ジョブ機能です。Azure ストレージ エクスプローラーまたは mvc Web アプリのいずれかを使用してキューにメッセージを追加することで、Web ジョブ機能を呼び出すことができます。

Web ジョブは、ローカルでコマンド ラインを実行して作業を実行するのに約 1 時間かかるコンソール アプリケーションです。Web ジョブを呼び出すと、正常に開始されましたが、しばらくすると (約 5 ~ 10 分)、Web ジョブ ログで関数の呼び出しステータスが "Never Finished" になっています。

だから私の質問は次のとおりです: -

1) この問題は長時間実行されているタスクによるものですか。

2) この問題は、処理中のエラーによるものですか (ただし、ローカルで実行できます)。

3) Web ジョブによって追加されたデータベースからレコードを削除すると、Web が再び開始されたことがわかります。なんで?

4) プロセスの完了後にキューからメッセージを削除する必要がある場合は?

これは、Web ジョブから呼び出される私のコード スニペットです。

namespace Scheduler
{
class Program
{
    static void Main()
    {

        JobHost host = new JobHost();
        host.RunAndBlock();
    }

    public static void ProcessQueueMessage([QueueTrigger("webjobschedularargs")] string schedularargs,
                                  [Blob("containername/blobname")]TextWriter writer)
    {
        //writer.WriteLine(inputText);
        string[] args = schedularargs.Split(new char[0]);

        RunProcess(args);
        writer.WriteLine(schedularargs);
    }

    private static void RunProcess(string[] args)
    {
        if (!Initialize())
        {
            // Log issue
            Console.WriteLine("Error!!! Unable to initialize.");
            Console.ReadKey(true);

            // We're done
            return;
        }

        #region Run processor

        var options = new Options();
        var timer = new Stopwatch();

        if (CommandLine.Parser.Default.ParseArguments(args, options))
        {
            Console.WriteLine("Processing: ");
            timer.Start();

            if (options.Profiles != null)
            {
                foreach (var profile in options.Profiles)
                {
                    Console.Write(profile + ", ");
                }
                Console.WriteLine();
            }

            if (options.Reports != null)
            {
                foreach (var report in options.Reports)
                {
                    Console.Write(report + ", ");
                }
                Console.WriteLine();
            }

            var processor = new Processor(options);
            processor.Start();
        }

        #endregion
        // Log reason why not valid command args

        //-----call run processor function

        timer.Stop();
        Console.WriteLine("Total time (ms): " + timer.ElapsedMilliseconds);
        Console.WriteLine("Done!!! Everything went ok.");

        //#if LOCAL
        //            Console.ReadKey(true);
        //#endif
    }



    private static bool Initialize()
    {
        // Set ninject values
        NinjectConfig.Start();

        // TODO: Set automapper values ??

        return true;
    }
}

}

編集:-

Azureで次のエラーが発生しています..

[07/10/2014 15:50:52 > 32a9e0: エラー] 未処理の例外: Microsoft.WindowsAzure.Storage.StorageException: リモート サーバーがエラーを返しました: (404) 見つかりません。---> System.Net.WebException: リモート サーバーがエラーを返しました: (404) 見つかりません。

[07/10/2014 15:50:52 > 32a9e0: エラー] System.Net.HttpWebRequest.GetResponse() で

[07/10/2014 15:50:52 > 32a9e0: エラー] Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync[T] (RESTCommand`1 cmd、IRetryPolicy ポリシー、OperationContext operationContext) で

[07/10/2014 15:50:52 > 32a9e0: ERR] --- 内部例外スタック トレースの終了 ---

[07/10/2014 15:50:52 > 32a9e0: エラー] Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync[T] (RESTCommand`1 cmd、IRetryPolicy ポリシー、OperationContext operationContext) で

[07/10/2014 15:50:52 > 32a9e0: エラー] Microsoft.WindowsAzure.Storage.Queue.CloudQueue.UpdateMessage (CloudQueueMessage メッセージ、TimeSpan visibilityTimeout、MessageUpdateFields updateFields、QueueRequestOptions オプション、OperationContext operationContext) で

[07/10/2014 15:50:52 > 32a9e0: エラー] Microsoft.Azure.Jobs.UpdateQueueMessageVisibilityCommand.TryExecute() で

[07/10/2014 15:50:52 > 32a9e0: エラー] Microsoft.Azure.Jobs.LinearSpeedupTimerCommand.Execute() で

[07/10/2014 15:50:52 > 32a9e0: エラー] Microsoft.Azure.Jobs.IntervalSeparationTimer.RunTimer (オブジェクトの状態) で

[07/10/2014 15:50:52 > 32a9e0: エラー] System.Threading.TimerQueueTimer.CallCallbackInContext (オブジェクトの状態) で

[07/10/2014 15:50:52 > 32a9e0: エラー] System.Threading.ExecutionContext.RunInternal (ExecutionContext executionContext、ContextCallback コールバック、オブジェクトの状態、ブール値の preserveSyncCtx) で

[07/10/2014 15:50:52 > 32a9e0: エラー] System.Threading.ExecutionContext.Run (ExecutionContext executionContext、ContextCallback コールバック、オブジェクトの状態、ブール値の preserveSyncCtx) で

[2014 年 7 月 10 日 15:50:52 > 32a9e0: エラー] System.Threading.TimerQueueTimer.CallCallback() で

[2014 年 7 月 10 日 15:50:52 > 32a9e0: エラー] System.Threading.TimerQueueTimer.Fire() で

[2014 年 7 月 10 日 15:50:52 > 32a9e0: エラー] System.Threading.TimerQueue.FireNextTimers() で

[2014 年 7 月 10 日 15:50:52 > 32a9e0: エラー] System.Threading.TimerQueue.AppDomainTimerCallback() で

[2014 年 7 月 10 日 15:50:52 > 32a9e0: 情報] ................................... ................................................................... ................................................................... ................ [07/10/2014 15:50:52 > 32a9e0: SYS ERR] 終了コード -532462766 が原因でジョブが失敗しました

[07/10/2014 15:50:52 > 32a9e0: SYS INFO] プロセスがダウンし、0 秒間待機しました

[07/10/2014 15:50:52 > 32a9e0: SYS INFO] ステータスが PendingRestart に変更されました

[07/10/2014 15:50:57 > 32a9e0: SYS INFO] スクリプト ホスト - 'WindowsScriptHost' でスクリプト 'Scheduler.exe' を実行します

[07/10/2014 15:50:57 > 32a9e0: SYS INFO] ステータスが実行中に変更されました

エラーを見て、コンソールアプリから同じ機能をローカルで実行しようとしましたが、その機能は機能します.複数回実行した後、機能が正確に5分間実行されていることがわかりました.Webジョブで関数を実行する時間が拘束されている場合.

ありがとう。

4

2 に答える 2

3

ストレージ アカウントがいつどこで作成されるかによって、既定で作成されるはずの BLOB コンテナーが作成されない WebJobs SDK にバグがあるようです。私がしなければならなかったのは、コンテナを自分で作成することでした。

彼らです:

azure-jobs-host-output
azure-webjobs-hosts

これで問題は解決しました。

于 2015-03-07T01:14:58.767 に答える