«Параметр неверен» при перемещении файла с помощью службы Windows - PullRequest
0 голосов
/ 18 октября 2011

Я написал службу Windows в C # / VS2008 / .NET3.5, которая отслеживает некоторые FTP-каталоги с помощью FileSystemWatchers и перемещает файлы в другое место для обработки.Сегодня я заметил, что он выдает ошибки, в которых говорится, что «параметр неверен» вскоре после запуска службы, но если мы подождем несколько минут, файл будет скопирован без происшествий.Я видел, что сообщение об ошибке часто связано с неправильными разрешениями, но я проверил, что разрешения для каталогов (цели и источника) были правильными, и, как я уже сказал, перемещение файла работает через несколько минут.

Вот фрагменткода, который вызывается после завершения копирования файла в контролируемый каталог FTP:

//found the correct source path
string targetDir = dir.TargetDirectory;
string fileName = Path.GetFileName(e.FullPath);

errorlocation = "move file";
string targetFilePath = Path.Combine(targetDir, fileName);
if (File.Exists(targetFilePath))
{
    File.Delete(targetFilePath);
}
File.Move(e.FullPath, Path.Combine(targetDir, fileName));

dir ссылается на объект с информацией о каталоге, в который был загружен файл.Это FileSystemEventArgs.Targetdir извлекается из настроек каталога в пользовательском блоке конфигурации в app.config, который сообщает службе, куда копировать новые файлы.

Я не включил здесь код, но я знаю, что он не работаетFile.Move (последняя строка выше) из-за некоторых записей EventLog, которые я сделал для отслеживания шагов.

Есть ли какие-либо идеи относительно того, почему перемещение завершается неудачно вскоре после запуска службы, но работает нормально позже?

Базовый обзор процесса на случай, если он проливает некоторый свет: внешние поставщики отправляют нам несколько FTP-сообщений.файлы каждый день.Когда файл поступает, мой код определяет, откуда он поступает, на основе каталога FTP, а затем загружает настройки для передачи заданиям SSIS, которые будут анализировать и сохранять файлы.Возможно, сейчас отслеживается около дюжины каталогов, каждый из которых имеет свой собственный параметр конфигурации для задания SSIS.Возможно ли, что система запутывается при запуске и просто нужно некоторое время, чтобы заполнить все настройки?Каждый исходный каталог имеет свой собственный FileSystemWatcher.

Спасибо за вашу помощь.

Ответы [ 2 ]

1 голос
/ 18 октября 2011

Первый вопрос, на который я отвечу: каковы их значения при сбое:

  • e.FullPath
  • targetDir
  • fileName

скорее всего, одно из этих значений не то, что вы ожидаете

0 голосов
/ 01 февраля 2012

Я отмечаю этот ответ, потому что проблема ушла. Мы ничего не изменили в коде, но теперь он работает сразу после перезапуска. Лучшая теория, которая у нас есть, такова: с тех пор, как я это опубликовал, клиент, на котором я работал, переехал в офис, и в рамках миграции было обновлено множество системных и сетевых политик, а также настроены параметры сервера для новой среды. Вероятно, одно (или несколько) из этих изменений исправили эту проблему.

Дальнейшая поддержка этой теории: до переезда моя разработка VM не могла запускать веб-браузеры. (Я бы щелкнул, чтобы загрузить браузер, и он не работал, иногда он ненадолго появлялся в диспетчере задач, а затем исчезал.) После переезда в офис эта проблема больше не возникает.

Так что, скорее всего, какие-то сетевые настройки вызвали проблемы. Извините, я не могу быть более конкретным.

...