由于意外文件锁定而导致_lopen文件打开错误的原因

时间:2012-09-28 17:02:58

标签: windows iis iis-6 file-locking

我正在维护一个访问服务器上数据的桌面应用程序。多个用户可以访问相同的文件。我们有一个库,可以使用_lopen(C库函数)打开要检索的文件。我们总是以SHARE_DENY_NONE打开只读。 为了提高性能,我们保持文件处于打开状态,直到用户退出应用程序。那是文件关闭的时候。 但是,如果超过20分钟没有活动,我们将失去与服务器的连接。在这种情况下,我们启动连接并再次打开文件。据说在连接丢失时调用了一个文件关闭操作,但没有证据表明文件关闭被调用。

不幸的是,每天有一两次用户收到一条错误消息,指出他们无法打开文件。我们认为这是因为文件被锁定,因为我们无法在资源管理器中打开它。清除错误的唯一方法是调用IISRESET,以便清除所有用于检索的文件句柄。但是,今天我们收到错误消息,这是一个通用文件打开错误,我们能够在资源管理器中打开该文件,并通过回收应用程序池来解决问题。

由于某些用户在完成任何操作之前启动应用程序后立即获得文件打开错误,因此我们认为此问题必须由其他用户(或进程)锁定文件引起。我们无法复制错误。

我查看了源代码以了解文件的打开方式。我查看了Process Explorer,我们的软件总是访问该文件。我查看了进程监视器,发现文件已打开,允许其他用户进行读/写操作,并且文件在应用程序关闭时关闭。我们从未在开发服务器上收到错误,但仅在生产服务器上收到错误。该错误不依赖于大量用户,因为我们无法使用1000个不同用户打开文件1000次的测试程序来复制它。此外,我们只看到了9个用户的错误。

我希望有人可以建议尝试其他测试或出现此问题的其他原因。

0 个答案:

没有答案