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

Azure Web作业突然停止正常工作,azure,csv,web-applications,azure-webjobs,Azure,Csv,Web Applications,Azure Webjobs,我编写了一个名为“blobsUploader”的程序,每天晚上11点将csv文件上传到blob容器 每当一个新的csv文件到达blob容器时,名为“BlobsAddressQueue”的队列中就会出现一条新消息,其中包含新blob(csv文件)的地址 这引发了Web作业,该作业读取csv文件并将其所有数据存储在名为“myDataTable”的Azure表中 整个过程非常有效,但从过去一两个月开始,每天晚上上传新csv时,Web作业过程都会出现错误,来自“blobsAddressQueue”的消息

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

每当一个新的csv文件到达blob容器时,名为“BlobsAddressQueue”的队列中就会出现一条新消息,其中包含新blob(csv文件)的地址

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

整个过程非常有效,但从过去一两个月开始,每天晚上上传新csv时,Web作业过程都会出现错误,来自“blobsAddressQueue”的消息会移动到“blobsAddressQueue poison”,这意味着消息已超过向应用程序传递尝试的最大次数

我现在上传了一份2018年6月的csv,这确实有效。 但是,现在具有此blob地址的消息位于“blobsAddressQueue”中

当我检查日志时,我可以看到5个失败的呼叫:

当我进行其中一次尝试并打开“切换输出”时,我得到的是: 这很奇怪,因为这个文件是在2018年6月读到的!!!没有任何问题!从那时起,我没有在我的代码或csv文件中更改任何内容


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

此问题与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; }
示例代码:

    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
    Id,Name
    1,"one""
    2,two

此问题与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; }
示例代码:

    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
    Id,Name
    1,"one""
    2,two

CsvHelper
是否是外部参照,例如?如果是,您是否更新了此软件包?因为显然有些事情改变了,否则你现在就有这个问题了。@rickvdbosch是的。我害怕更新这个软件包,这样我就不会弄得更糟了。此外,如果到目前为止,旧软件包的所有功能都正常工作,而其他功能都没有更新,那么更新csvHelper又有什么帮助呢?除此之外,我刚刚从2017年开始尝试了另一个csv(它们的结构完全相同),效果很好@rickvdboschAgree和@rickvdbosch,是你的程序集改变了,可能与webjobs不工作无关。@I.zv我几周前发布了一个答案。你有机会看一看吗?如果有用的话,你能把它标记为一个答案以便其他人能很容易地看到吗?
CsvHelper
是一个外部参考,比如一个?如果是,您是否更新了此软件包?因为显然有些事情改变了,否则你现在就有这个问题了。@rickvdbosch是的。我害怕更新这个软件包,这样我就不会弄得更糟了。此外,如果到目前为止,旧软件包的所有功能都正常工作,而其他功能都没有更新,那么更新csvHelper又有什么帮助呢?除此之外,我刚刚从2017年开始尝试了另一个csv(它们的结构完全相同),效果很好@rickvdboschAgree和@rickvdbosch,是你的程序集改变了,可能与webjobs不工作无关。@I.zv我几周前发布了一个答案。你有机会看一看吗?如果有帮助的话,你能把它标记为一个答案,让其他人很容易看到吗?