Я пытался спросить этот вопрос на Stackoverflow, учитывая, что это связано с программированием, но, похоже, это скорее проблема сервера, чем что-либо еще.
У меня есть приложение на основе .Net framework 3.5 на Windows Server 2008, которое отслеживает 22 папки на удаленном сервере / сетевом пути. Я использую FileSystemWatcher
и время от времени я получаю исключение в журнале.
System.ComponentModel.Win32Exception: достигнут предел сетевых команд BIOS.
Я пробовал следовать статья KB-810886, но поскольку мой сервер - Windows Server 2008, у меня нет ключей реестра для MaxCmds
, MaxMpxCT
и т.д. Я уже рассмотрел связанные вопросы по Stackoverflow, например вот этот и вот этот, но, похоже, ни один из них не решил проблему.
У меня вопрос:
Есть ли способ увеличить лимит MaxCMD в Windows Server 2008? и Нужно ли мне увеличить лимит на моем сервере, на котором размещена служба Windows, или мне следует увеличить лимит на файловом сервере (на котором есть все папки).
Вот код, который я пробовал в своем коде:
Я пробовал увеличить InternalBufferSize до MAX (64 КБ), но это не влияет на исключение.
Я определил это так:
На уровне класса:
FileSystemWatcher fsw;
В методе инициализации
fsw = new FileSystemWatcher("FolderUNC");
fsw.IncludeSubdirectories = false;
//m_fsw.InternalBufferSize = 65536; -- Commented out to default 8K
fsw.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.DirectoryName | NotifyFilters.FileName | NotifyFilters.Size;
fsw.Renamed += new RenamedEventHandler(OnChanged);
fsw.Deleted += new FileSystemEventHandler(OnChanged);
fsw.Changed += new FileSystemEventHandler(OnChanged);
fsw.Created += new FileSystemEventHandler(OnChanged);
fsw.Error += new ErrorEventHandler(OnFileSystemWatcherError);
fsw.EnableRaisingEvents = true;
Я также убеждаюсь, что утилизирую FileSystemWatcher
объект при ошибке или при остановке службы. подобно
if (fsw != null)
fsw.Dispose();
Мы приветствуем любую помощь или руководство в решении проблемы.