【问题标题】:IIS File Lock - The Process Cannot Access The File Because It Is Being Used By Another ProcessIIS 文件锁定 - 进程无法访问该文件,因为它正被另一个进程使用
【发布时间】:2012-06-28 03:38:11
【问题描述】:

我有一个包含 JSON 格式缓存数据的文本文件。我正在尝试更新文件,但我的 IIS 工作进程正在锁定文件,当我尝试写入文件时,我收到错误消息“进程无法访问文件,因为它正被另一个进程使用”。我在 Google 和 Stack 上搜索了答案,但似乎找不到与 IIS 锁定文件相关的任何内容。该文本文件包含在我的 Visual Studio 解决方案中,我在本地计算机上使用 IIS 来托管我的网站。对于我的第一个问题,我想知道如何让 IIS 释放文件或根本不锁定它。对于第二个问题,我想知道是否有其他方法可以防止 IIS 锁定我的文件。

【问题讨论】:

  • 您能否在您的应用程序中发布从该文件读取/写入的代码?

标签: c# asp.net iis


【解决方案1】:

IIS 没有锁定您的文件。 IIS 不知道您的文件是否存在。某些应用程序(可能是您自己的应用程序)正在锁定文件。

尝试使用SysInternals 中的procmon 之类的程序来找出锁定文件的进程。

【讨论】:

  • ps:您可以使用免费的 sysinternals 工具 Handle 来确定哪个应用程序锁定了文件:technet.microsoft.com/en-us/sysinternals/bb896655
  • 在发布此问题之前,我确实使用了 Process Explorer 来找出锁定文件的进程,正如我在描述中所说,锁定文件的进程是我的 IIS 工作进程。跨度>
  • IIS 工作进程不是“IIS”。这是在该进程中运行的您的代码。
  • 我的问题是我没有使用文件流阅读器构造函数的长版本。如果您知道其他内容正在写入,请在打开文件进行读取时设置文件共享模式(“共享”)。
  • 如果是这样,甚至可以使用默认的 Windows 10 进行检查 Task Manager -> Performance 选项卡 -> Resource Monitor -> CPU 选项卡 -> Associated Handles 并搜索一份文件。相同的Resource Monitor 应该存在于其他版本的 Windows 中。
【解决方案2】:

午休后,我意识到工作进程挂在文本文件上,因为它正在读取其中的一行,然后尝试写入。我将文件包装在 using 语句中,并在读取后移动写入,现在它正在工作。

【讨论】:

    【解决方案3】:

    我在尝试发布 .NET Core API 应用程序时遇到了类似的问题(文件被 IIS 工作进程锁定)。

    如果它对任何人有帮助,我的问题是由调用 API 的相关应用程序引起的,在尝试发布 API 时处于调试模式。

    【讨论】:

      【解决方案4】:

      我能够通过在每次请求后回收应用程序池来解决问题。转到应用程序池的高级设置。在回收下,将请求限制设置为 1。

      【讨论】:

      • 这真是个低效的建议。回收应用程序池会导致工作进程重新启动。尽管现有工作进程和新工作进程之间存在(可配置的)重叠,但在再次编译应用程序时会执行大量工作,这将在此场景中的每个请求之后发生。
      猜你喜欢
      • 2010-12-10
      相关资源
      最近更新 更多