Прерывистое исключение System.IO.DirectoryNotFoundException на веб-сервере, обращающемся к сетевому диску - PullRequest
0 голосов
/ 13 февраля 2019

У нас есть веб-сервер, на котором запущен hangfire, который периодически опрашивает общий сетевой диск с примером пути:

\\SXXXXX\XXXXX$\XXX\ 

, который периодически выдает исключение System.IO.DirectoryNotFoundException, однако каталог создается тем же компонентомкода.

Кажется, что он работает нормально 8/10 раз, и в 2 раза он генерирует исключение, фактически удаляет папку, если она пуста, то есть код, который выполняется после точки исключения?

Вот пример блока кода:

 var downloadDirectory = "*OMITTED*
        Directory.CreateDirectory(downloadDirectory);
        TestDirectoryCreatedOnNetwork(downloadDirectory);


var dir = new DirectoryInfo(downloadDirectory);

        if (dir.GetFiles().Count() == 0)
        {
            Directory.Delete(downloadDirectory);
            return false;
        }

Поиск в Google привел нас к мысли, что: Directory.CreateDirectory () потенциально может страдать от задержки, поэтому мы добавили следующее:

private static void TestDirectoryCreatedOnNetwork(string directory)
    {
        int waitCount = 10;
        do
        {
            if (Directory.Exists(downloadDirectory))
            {
                break;
            }

            Thread.Sleep(10000); // sleep 100ms
            waitCount--;
            if (waitCount <= 0)
            {
                throw new Exception("Failed to create directory");
            }
        } while (true);
    }

Мы знаем, что код работает из-за того, что он выполняется 8/10 раз, поэтому мы не совсем уверены, куда идти.

Спасибо!

1 Ответ

0 голосов
/ 18 февраля 2019

Как уже упоминалось в комментариях, это было вызвано плохими сетевыми условиями, с тех пор мы перенесли создание папок на локальные диски реальных веб-серверов, и теперь все работает

...