У меня есть служба, которая открывает несколько наблюдателей для просмотра нескольких папок. После просмотра папок в течение определенного времени я получаю сообщение «Достигнут предел сетевой команды BIOS».
Как я читал здесь, это вызвано наличием большего количества долгосрочных запросов, чем разрешено.
Я считаю, что это происходит из-за приведенного ниже кода обработки ошибок, который у меня есть, который запускается событием ошибки наблюдателей. Это запускает новый экземпляр наблюдателя, снова вызывая метод WatchFile. Я полагаю, что это оставляет старый, ныне несуществующий наблюдатель, и запускает новый наблюдатель, но я боюсь, что остановка наблюдателя либо предотвратит его повторный запуск, либо остановит все экземпляры на основе наблюдателя.
Или я ошибаюсь и ошибка зависит от количества изменений? Это приведет к одновременному сбросу 100 файлов, что вызовет эту ошибку.
Я думал о том, чтобы остановить и запустить службу всякий раз, когда я запускаю эту ошибку, но это не решит саму проблему, а просто скроет ее. Есть ли лучшее решение?
private static void watcherError(String directory, Boolean intray, ErrorEventArgs e, FileSystemWatcher watcher)
{
Exception watchException = e.GetException();
EventLog.WriteEntry("WhiteFileMover", String.Concat("error gedetecteerd, watcher werd herstart - ", watchException.Message), EventLogEntryType.Information);
watcher = new FileSystemWatcher();
while (!watcher.EnableRaisingEvents)
{
try
{
// This will throw an error at the
// watcher.NotifyFilter line if it can't get the path.
WatchFile(directory, intray);
}
catch(Exception exp)
{
// Sleep for a bit; otherwise, it takes a bit of
// processor time
EventLog.WriteEntry("WhiteFileMover", String.Concat("Failed to restart watcher, retrying in 5 seconds - ", exp.Message), EventLogEntryType.Warning);
System.Threading.Thread.Sleep(5000);
}
}
}