Служба Windows (например, Email_Tool), которая работала нормально раньше, не работает должным образом в последнее время.
Обзор услуг
Проблема
Email_Tool не работает так, как ожидалось, с нескольких дней. Эти шаги не регистрируются в файле журнала, и электронные письма не отправляются.
Шаги, предпринятые
Мы предприняли много шагов для определения проблемы. Ниже приведены некоторые из них:
Как ясно, служба, которая работала ранее, не работает для общих путей, которые использовались в Production.
Полезная информация
BaseException
Базовая область исключений дала следующие коды:
ErrorCode: -2147467259 Исходный код ошибки: 58
Указанный выше код ошибки 58 указывает на следующее (поиск в Google)
ERROR_BAD_NET_RESP 58 (0x3A) Указанный сервер не может выполнить запрошенную операцию.
InnerException
Внутреннее исключение показало следующий код:
_COMPlusExceptionCode -532459699 int
коды
событие запуска службы имеет этот фрагмент кода
m_Watcher = new System.IO.FileSystemWatcher();
m_Watcher.Filter = "*.*";
m_Watcher.Path = @filWatcherPath;
m_Watcher.IncludeSubdirectories = true;
m_Watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
| NotifyFilters.FileName | NotifyFilters.DirectoryName;
m_Watcher.Created += new FileSystemEventHandler(OnChanged);
// m_Watcher.Error += new ErrorEventHandler(OnError);
m_Watcher.EnableRaisingEvents = true;
В качестве обходного решения мы часто использовали другой файловый сервер, на котором служба работает нормально. Но мы должны найти исправление. Пожалуйста, дайте мне знать, есть ли какая-либо другая информация, которую я должен предоставить. Ранее я разместил этот вопрос, но я думаю, что этот пост содержит более подробную информацию.
Он нашел основную причину этой проблемы. Наблюдаемый каталог был отсоединен от сетевого диска, возможно, из-за сетевых сбоев. Даже после того, как каталог подключился, наблюдатель за файлом не смог просмотреть этот каталог до его перезапуска.
Решение заключалось бы в том, чтобы возбуждать исключение, когда такое происходит, и затем автоматически перезапускать наблюдателя (или любой другой метод, чтобы изящно обрабатывать ситуацию)
Для этого есть флаг: EnableRaisingEvents. Это должно быть верно для захвата таких ошибок. Подробнее о EnableRaisingEvents читайте здесь.
Существует предложение в документации, которая гласит:
На удаленных компьютерах должна быть установлена одна из необходимых платформ для правильной работы компонента.
Если ваше оборудование изменилось, убедитесь, что у вас все еще есть одна из необходимых платформ с другой стороны FileSystemWatcher
.