Задания Azure Web неожиданно перестали работать правильно - PullRequest
0 голосов
/ 03 января 2019

Я написал программу с именем «blobsUploader», которая каждую ночь в 23:00 загружает CSV-файл в контейнер BLOB-объектов.

Всякий раз, когда новый CSV-файл поступает в контейнер BLOB-объектов, в очереди появляется новое сообщение с именем «blobsAdressQueue» с адресом нового BLOB-объекта (CSV-файл).

Это вызывает веб-задание, которое читает файл csv и сохраняет все его данные в таблице Azure с именем «myDataTable».

Весь процесс работал отлично, но внезапно с прошлого месяца или двух, каждую ночь, когда загружается новый csv, возникает ошибка в процессе веб-задания, и сообщение от «blobsAddressQueue» перемещается в «blobsAddressQueue-toxic», которое означает сообщение, которое превысило максимальное количество попыток доставки приложения.

Я загрузил CSV с июня 2018 года, который работал точно. Однако теперь сообщение с адресом этого BLOB-объекта находится в "blobsAddressQueue-toxic".

Когда я проверяю логи, я вижу 5 неудачных звонков: enter image description here

Когда я вхожу в одну из попыток и открываю «Toggle Output», вот что я получаю: enter image description here Что очень странно, потому что этот файл был прочитан в июне 2018 года !!! без проблем! С тех пор я ничего не менял ни в своем коде, ни в файле csv.

Если для решения проблемы требуется дополнительная информация, пожалуйста, дайте мне знать.

1 Ответ

0 голосов
/ 15 января 2019

Эта проблема связана не с веб-заданием, а с библиотекой 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...