我在 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 作业中运行任何功能。
谢谢。