IIS7 .NET 网站延迟检测 UNC 路径上的文件更改

IIS7 .NET 网站延迟检测 UNC 路径上的文件更改

我正在处理一个问题,但无法找到任何已解决此特定问题的帖子或文档。

设置:

此问题与一个访问量很大的网站有关,该网站使用 .NET 3.5 编写,并在 IIS7 上运行。该应用程序通过应用程序的 Web.config 中设置的 UNC 路径使用 Lucene 搜索索引。此 UNC 路径在 16 个 Web 服务器上都是相同的,并且它们都在此单一位置访问相同的索引。该应用程序以经典模式(与集成模式相比)运行,并使用身份和模拟。该帐户具有足够的权限。Web 服务器目前都是 Windows 2008 服务器,源文件共享也是运行 SQL Server 2008 的 Windows 2008 服务器。服务器始终处于工作站配置,从不属于域,也没有 AD。所有服务器都有一个主用户帐户,该帐户的配置相同,具有相同的权限和密码。

历史:

多年来,在几种配置下,此设置一直运行良好。最近,运行 Windows 2003 和 IIS6 的 Web 服务器访问运行 SQL Server 2005 的 Windows 2003 服务器上的此远程 UNC 文件共享。最近,运行 Windows 2008 和 IIS7 的 Web 服务器访问刚才提到的同一个 Windows 2003 上的此远程 UNC 文件共享(带有 SQL)。现在,将此 UNC 共享移动到此新的 Windows 2008 服务器上(带有 SQL)后,才会出现问题。

问题:

该网站目前运行良好,每个 Web 服务器都可以访问索引并按应有的方式成功利用索引。但是,Lucene“段”文件会定期(根据活动和定时服务,间隔 1 到 15 分钟)被删除和替换(更改)。当前文件,例如“segments_xyz”被替换为“segments_zyx”。并非每次都会发生这种情况,但大多数情况下,应用程序会查找上一个文件,而不是当前文件。这会导致 FileNotFoundException,报告​​的 .NET 错误为:System.IO.FileNotFoundException:找不到文件“\XXXX\Index\20101201\guid-xxxx\segments_zyx”。这种情况持续 1 到 3 秒,并且发生在所有服务器上。这种情况是可重现的,因为我可以直接在一台服务器上访问该网站,观察文件是否发生变化,当文件发生变化时,我可以刷新页面并收到 1 到 3 秒的错误。

一些观点和理论:

  • 我怀疑这是一个权限问题,尽管这似乎不太可能。我已经用尽了权限配置选项。我甚至利用 Everyone 用户帐户组将文件共享配置为具有完全公共访问权限,并且身份帐户通过包含在管理员组中而被授予完全管理员权限。我已经调整了身份验证 ASP.NET 模拟设置等。

  • 怀疑某种 UNC 文件共享缓存,我检查了源共享服务器上的卷影副本 (VSS) 设置,并查看了每个 Web 服务器以确保没有以前的版本等。这对我来说似乎也不太可能是原因。

  • 在集成模式下运行应用程序不是一种选择

  • 该问题出现在我们的 16 台网络服务器中的每一台上,并且似乎所有(或大多数)服务器都同时通过相同的文件更改迭代受到影响。

  • 需要明确的是,这个问题只有在我将共享从 Windows 2003 w/ SQL 服务器移至 Windows 2008 w/ SQL 服务器时才会出现。配置尽可能相同,配置没有什么特别之处,这是一个配置了通用权限的简单标准文件共享。

  • 我已完成必要的重启、重新配置、服务重置等。

  • 我尝试将 UNC 路径配置更改为映射驱动器配置,但目前存在应用程序问题,导致无法使用此选项。我不知道这是否能解决当前的问题,我更希望不要将此作为解决方案实施。

此问题每天会导致 1000 多个错误。希望有人能提供一些想法?我将永远感激任何帮助!

答案1

更新:我找到了解决方案:http://technet.microsoft.com/en-us/library/ff686200(WS.10).aspx

DirectoryCacheLifetime 设置为零解决了该问题。

相关内容