3

我在 azure 中创建了一个网络作业。Web 作业是一种连续运行。当队列中有消息时调用的 Web 作业函数。我可以通过 Azure 存储资源管理器或 mvc Web 应用程序在队列中添加消息来调用 Web 作业功能。

Web 作业是一个控制台应用程序,通过在本地使用命令行运行来执行一项工作大约需要一个小时。调用 Web 作业后,它成功启动,但过了一段时间(大约 5-10 分钟),我在 Web 作业日志中发现功能 Invoke status 为“Never Finished”。

所以我的问题如下: -

1)这个问题是由于长时间运行的任务造成的吗?

2)这个问题是由于处理过程中的任何错误造成的吗?(但我可以在本地运行它)

3)如果我从网络作业添加的数据库中删除记录,那么我发现网络再次启动。为什么?

4)如果我需要在处理完成后从队列中删除消息?

这是我从网络作业调用的代码片段

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;
    }
}

}

编辑:-

我在天蓝色中遇到以下错误..

[07/10/2014 15:50:52 > 32a9e0: ERR ] 未处理的异常:Microsoft.WindowsAzure.Storage.StorageException:远程服务器返回错误:(404) 未找到。---> System.Net.WebException:远程服务器返回错误:(404)未找到。

[07/10/2014 15:50:52 > 32a9e0: ERR ] 在 System.Net.HttpWebRequest.GetResponse()

[07/10/2014 15:50:52 > 32a9e0: ERR ] 在 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: ERR ] 在 Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync[T](RESTCommand`1 cmd,IRetryPolicy 策略,OperationContext operationContext)

[07/10/2014 15:50:52 > 32a9e0: ERR ] 在 Microsoft.WindowsAzure.Storage.Queue.CloudQueue.UpdateMessage(CloudQueueMessage 消息,TimeSpan visibilityTimeout,MessageUpdateFields updateFields,QueueRequestOptions 选项,OperationContext operationContext)

[07/10/2014 15:50:52 > 32a9e0: ERR ] 在 Microsoft.Azure.Jobs.UpdateQueueMessageVisibilityCommand.TryExecute()

[07/10/2014 15:50:52 > 32a9e0: ERR ] 在 Microsoft.Azure.Jobs.LinearSpeedupTimerCommand.Execute()

[07/10/2014 15:50:52 > 32a9e0: ERR ] 在 Microsoft.Azure.Jobs.IntervalSeparationTimer.RunTimer(对象状态)

[07/10/2014 15:50:52 > 32a9e0: ERR ] 在 System.Threading.TimerQueueTimer.CallCallbackInContext(对象状态)

[07/10/2014 15:50:52 > 32a9e0: ERR ] 在 System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext,ContextCallback 回调,对象状态,布尔值 preserveSyncCtx)

[07/10/2014 15:50:52 > 32a9e0: ERR ] 在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback 回调,对象状态,布尔值 preserveSyncCtx)

[07/10/2014 15:50:52 > 32a9e0: ERR ] 在 System.Threading.TimerQueueTimer.CallCallback()

[07/10/2014 15:50:52 > 32a9e0: ERR ] 在 System.Threading.TimerQueueTimer.Fire()

[07/10/2014 15:50:52 > 32a9e0: ERR ] 在 System.Threading.TimerQueue.FireNextTimers()

[07/10/2014 15:50:52 > 32a9e0: ERR ] 在 System.Threading.TimerQueue.AppDomainTimerCallback()

[07/10/2014 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

WebJobs sdk 中似乎存在一个错误,它没有创建默认情况下应该创建的 blob 容器,具体取决于创建存储帐户的时间和位置。我必须做的是自己创建容器。

他们是:

azure-jobs-host-输出
azure-webjobs-hosts

这为我解决了问题。

于 2015-03-07T01:14:58.767 回答
1

我发现如果在函数调用中将 unicode 字符传递给记录器对象,就会出现问题。显然不支持 unicode,并且清理过程中的某些东西变坏了,并且工作永远不会关闭。

于 2016-01-21T16:32:32.427 回答