我们遇到Azure Web Jobs问题。我们创建了一个C#控制台应用程序,压缩它,并创建了新的Web作业。它是一个c#控制台应用程序,它将不断点击我们的一个Web服务来处理队列中的项目。
每当我们运行Web Job时,都会收到以下错误:
由于没有输出和CPU活动,'cmd / c xxxxxxxx ....'中止 121秒您可以将SCM_COMMAND_IDLE_TIMEOUT设置增加到 解决问题
当我们将SCM_COMMAND_IDLE_TIMEOUT增加到600
时(10分钟)。作业运行10分钟 - 然后我们得到相同的错误,同样的121 seconds
错误。
我们做错了什么?
以下是控制台应用代码:
static void Main(string[] args)
{
bool ThereAreItemsInQueue = true;
int Counter = 1;
DateTime StartTime = DateTime.Now;
while(ThereAreItemsInQueue)
{
Task.Run(() => {
try
{
//DEQUEUE
byte[] response = HttpHelper.HttpPOST(@"xxxxxxxxxxxxx", new byte[0]);
string strResponse = System.Text.Encoding.Default.GetString(response);
System.Diagnostics.Trace.TraceError("Attempt #" + Counter + "DEQUEUE FINISHED. Response:" + strResponse);
//CHECK IF THE QUEUE IS EMPTY
if (strResponse.Contains("Were Done"))
ThereAreItemsInQueue = false;
}
catch(Exception ex)
{
System.Diagnostics.Trace.TraceError("Error Has Occured on attempt #" + Counter + "." + ex.Message + "\r" + ex.StackTrace);
}
});
System.Threading.Thread.Sleep(5000);
//SEE IF THIS HAS BEEN RUNNING FOR MORE THAN 24 HOURS
if (DateTime.Now.Subtract(StartTime).TotalHours >= 24)
ThereAreItemsInQueue = false;
Counter++;
}
}
我们是否以错误的方式处理此问题?
注意:每个HttpHelper.HttpPOST
请求大约需要2秒 - 所以这不是问题。
注意2:我们正在使用Task.Run
来创建“set-it-and-forget-it”类型的请求。
注意3:“始终开启”的网站设置已开启。
答案 0 :(得分:20)
对于触发的WebJobs,增加空闲超时的方法是使用应用设置: WEBJOBS_IDLE_TIMEOUT 。将其设置为所需的超时时间(秒)。
错误令人困惑,仅在部署期间引用空闲超时。
https://github.com/projectkudu/kudu/wiki/Web-jobs#configuration-settings
答案 1 :(得分:0)
这似乎解决了我的问题:
if (Counter % 25 == 0)
Console.WriteLine("Heartbeat");
我猜你必须一直写到控制台以保持JOB运行。