Azure Web作业突然停止正常工作

时间:2019-01-03 12:07:53

标签: azure csv web-applications azure-webjobs

我编写了一个名为“ blobsUploader”的程序,该程序每晚晚上11点将csv文件上传到blob容器。

每当一个新的csv文件到达blobs容器时,就会在名为“ blobsAdressQueue”的队列中显示一条新消息,其中包含新blob(csv文件)的地址。

这将引起Web作业,该作业读取csv文件并将其所有数据存储在名为“ myDataTable”的Azure表中。

整个过程运行良好,但是从过去的一两个月突然开始,每天晚上上传新的csv时,Web Job进程都会出错,并且“ blobsAddressQueue”消息将移至“ blobsAddressQueue-poison”,表示消息已超过向应用程序的最大传递尝试次数。

我现在从2018年6月上载了一个csv,可以肯定地工作了。 但是,现在带有该Blob地址的消息位于“ blobsAddressQueue-poison”中。

当我查看日志时,我可以看到5个失败的呼叫: enter image description here

当我尝试其中一种并打开“切换输出”时,我得到的是: enter image description here 这很奇怪,因为该文件是在2018年6月读取的!没有任何问题!从那以后,我没有更改代码或csv文件中的任何内容。

如果需要更多信息来回答问题,请告诉我。

1 个答案:

答案 0 :(得分:1)

此问题与webjob无关,但与您引用的CsvHelper库有关。我检查了源代码,发现当一个字段包含引号并且该字段未加引号(转义)时,该字段将被视为错误数据。

源代码:

/// <summary>
/// Gets or sets the function that is called when bad field data is found. A field
/// has bad data if it contains a quote and the field is not quoted (escaped).
/// You can supply your own function to do other things like logging the issue
/// instead of throwing an exception.
/// Arguments: context
/// </summary>
Action<ReadingContext> BadDataFound { get; set; }

解决方案是

修改csv文件中的问题字段

通过将BadDataFound设置为null来忽略不良数据:

csv.Configuration.BadDataFound = null;

示例代码:

    static void Main(string[] args)
    {
        using (var reader = new StreamReader(@"C:\Users\toml\Desktop\test.csv"))
        using (var csv = new CsvReader(reader))
        {
            csv.Configuration.BadDataFound = null;
            var records = csv.GetRecords<Foo>();

            foreach(var item in records)
            {
                Console.WriteLine(item.Name);
            }
        }

        Console.ReadKey();
    }
}

public class Foo
{
    public int Id { get; set; }
    public string Name { get; set; }
}

无效的CSV示例:

    Id,Name
    1,one"
    2,two

有效CSV样本:

    Id,Name
    1,"one""
    2,two