我正在处理一个问题,一直没有find任何已经解决这个具体问题的文章或文件。
设置:
这个问题是关于一个访问量很大的网站,用.NET 3.5编写,并运行在IIS7上。 应用程序通过应用程序的Web.config中的UNCpath集使用Lucenesearch索引。 UNCpath在16台Web服务器上都是相同的,并且它们都在同一个位置访问相同的索引。 应用程序运行在经典模式(vs集成),它使用身份和模拟。 该帐户具有足够的权限。 Web服务器目前都是Windows 2008服务器,源文件共享也是运行SQL Server 2008的Windows 2008服务器。 服务器始终在工作站configuration中,从不是域,也不是AD。 所有服务器都有一个相同的权限和密码configuration的主用户帐户。
历史:
这种设置在几种configuration下工作良好。 最近,运行Windows 2003和IIS6的Web服务器在运行SQL Server 2005的Windows 2003服务器上访问远程UNC文件共享。最近,运行Windows 2008和IIS7的Web服务器在同一个Windows 2003上访问这个远程UNC文件共享,刚才提到。 在将此UNC共享移动到具有SQL的新的Windows 2008服务器之后,才会出现问题。
问题:
该网站目前运行良好,每个Web服务器都可以访问索引,并成功地使用索引。 但是,周期性地(根据活动和定时服务在1到15分钟之间),Lucene“细分”文件将被删除并replace(已更改)。 当前文件,例如“segments_xyz”被replace为“segments_zyx”。 不是每次发生这种情况,而是大多数情况下,应用程序都会查找以前的文件,而不是当前文件。 这会导致FileNotFoundException,并且报告的.NET错误是:System.IO.FileNotFoundException:找不到文件'\ XXXX \ Index \ 20101201 \ guid-xxxx \ segments_zyx'。 这会持续1到3秒,并且会在所有服务器上发生。 这是可重复的,我可以直接在一台服务器上访问该站点,注意文件更改,当它可以刷新页面,并收到1到3秒的错误。
一些观点和理论:
我怀疑这是一个权限问题,尽pipe这似乎不太可能。 我用尽了权限configuration选项。 我甚至已经使用Everyone用户帐户组完全configuration了文件共享,完全公共访问权限,并且身份帐户被包含在pipe理员组中,具有完全的pipe理员权限。 我调整了身份validationASP.NET模拟设置等。
怀疑某种UNC文件共享caching我已经查看了源共享服务器上的Shadow Copy(VSS)设置,并且已经查看了每个Web服务器以确保没有以前的版本等。这似乎也不太可能是原因我。
在集成模式下运行应用程序不是一个选项
这个问题发生在我们的16个Web服务器上的每一个单独的服务器上,并且看起来他们都(或者大部分)通过相同的文件更改迭代同时受到影响。
要非常清楚,当我将共享从Windows 2003 w / SQL服务器移动到我们的Windows 2008 w / SQL服务器时,此问题才显示出来。 configuration尽可能相同,没有什么特别的configuration,这是一个简单的标准文件共享configuration了公共权限。
我已完成必要的重新启动,重新configuration,服务重置等。
我试图将UNCpathconfiguration更改为映射的驱动器configuration,但是当前存在阻止该选项的应用程序问题。 我不知道这是否会解决这个目前的问题,我更不希望这个解决scheme。
这个问题导致每天有1000个错误。 希望有人有一些想法? 我会永远感谢你的帮助!
更新:我发现我的解决scheme: http : //technet.microsoft.com/en-us/library/ff686200(WS.10).aspx
DirectoryCacheLifetime设置为零解决了这个问题。