【发布时间】:2021-04-28 17:11:52
【问题描述】:
我们在生产环境中的 Azure 应用服务(Windows 机器)中托管了一个 dotnet 核心应用程序。它由两个组件组成 -
- 电子邮件服务
- 业务规则引擎
电子邮件服务首先将所有电子邮件下载到托管应用程序的同一目录中的文件夹Attachments (D:\home\wwwroot\)。对于每封电子邮件,都会在 Attachments 目录下创建一个单独的目录(带有 guid 值)。
业务规则引擎访问该文件夹并使用电子邮件及其附件。完成后,我们从Attachments 目录中清除所有内容。
我们看到的问题是,在处理了一定数量的电子邮件后,我们的应用程序突然无法在Attachments 文件夹下创建目录。声明
Directory.CreateDirectory({path})
抛出一个错误,指出找不到指定的路径。
我们能够解决此问题的唯一方法是重新启动应用服务,它会再次愉快地继续创建目录、处理电子邮件,直到它在一天左右再次失败 8-|
我们已经尝试过 -
我们的应用程序是多线程应用程序,因此假设可能有一个线程由于资源处理不正确或不完整而锁定文件系统,我们将其更改为单线程处理
在创建目录的地方,我们使用
DirectoryInfo,所以在每次删除、创建目录等操作后尝试使用DirectoryInfo.Refresh()无论在哪里使用
FileStream,我们都添加了明确的.Dispose()语句来处理FileStream在每次服务运行结束时调用
GC.Collect()
我怀疑此问题是由 Azure 环境引起的,但我们无法确定导致此问题的原因。有没有人遇到过这样的问题,如果有,是怎么解决的?
【问题讨论】:
标签: c# azure asp.net-core azure-web-app-service