В нашей производственной среде у нас есть основное приложение dotnet, размещенное в службе приложений Azure (на компьютере с Windows).Он состоит из двух компонентов -
- Служба электронной почты
- Механизм бизнес-правил
Служба электронной почты сначала загружает все электронные письма в папку Attachments
в папкетот же каталог, где размещено приложение (D:\home\wwwroot\
).Для каждого электронного письма создается отдельный каталог (со значением guid) в каталоге Attachments
.
Механизм бизнес-правил обращается к этой папке и использует электронное письмо и его вложения.После этого мы удаляем все содержимое из каталога Attachments
.
Проблема, с которой мы сталкиваемся, заключается в том, что после обработки определенного количества электронных писем наше приложение не может создавать каталоги подпапка Attachments
.Оператор
Directory.CreateDirectory({path})
выдает ошибку о том, что указанный путь не может быть найден.
Единственный способ решить эту проблему - перезапустить службу приложения и снова выполнить ее успешно.продолжает создавать каталоги, обрабатывать электронные письма до тех пор, пока через день не произойдет сбой 8- |
То, что мы пробовали -
Наше приложение было многопоточнымИсходя из того, что, возможно, один поток удерживает блокировку файловой системы из-за неправильной или неполной утилизации ресурсов, мы изменили ее на однопоточную обработку
Там, где создавались каталоги, мыиспользовал DirectoryInfo
, поэтому пытался использовать DirectoryInfo.Refresh()
после каждого удаления, создания и т. д.
Где бы ни использовался FileStream
, мы добавили явные операторы .Dispose()
для удаленияFileStream
Вызывается GC.Collect()
в конце каждого запуска нашего сервиса
Я подозреваю, что эта проблема связана с Azureсреда, но мы не былив состоянии определить, что вызывает эту проблему.У кого-нибудь были такие проблемы, и если да, то как они были решены?