服务器上动态生成的文件未在Windows server 2003上释放进程句柄.NET

服务器上动态生成的文件未在Windows server 2003上释放进程句柄.NET,.net,windows,file,iis-6,.net,Windows,File,Iis 6,我构建了一个web应用程序,用户可以请求在服务器上生成并发送回客户端的报告。该过程工作正常,并将文件发送回客户端,但我们无法打开该文件。进一步的调查显示,服务器上的进程仍然拥有IIS应用程序池对文件的句柄 奇怪的是: NET代码调用Close()关闭文件和底层流 此问题仅发生在我们的生产服务器中。在开发和测试中,它工作良好 我们尝试在服务器和IIS中更改许多不同的设置 我们已经尝试了许多不同的想法,以使其在生产服务器上工作,但到目前为止运气不佳 这可能是什么原因?我们正在运行Windows Se

我构建了一个web应用程序,用户可以请求在服务器上生成并发送回客户端的报告。该过程工作正常,并将文件发送回客户端,但我们无法打开该文件。进一步的调查显示,服务器上的进程仍然拥有IIS应用程序池对文件的句柄

奇怪的是:

  • NET代码调用Close()关闭文件和底层流
  • 此问题仅发生在我们的生产服务器中。在开发和测试中,它工作良好
  • 我们尝试在服务器和IIS中更改许多不同的设置
  • 我们已经尝试了许多不同的想法,以使其在生产服务器上工作,但到目前为止运气不佳

  • 这可能是什么原因?我们正在运行Windows Server 2003、IIS 6。请帮忙

    您说文件上的“.NET代码调用Close()”。它是否也对用于创建文件的任何资源调用Dispose()?

    如果通过HTTP发送文件,服务器的锁定不会对在客户端打开文件产生任何影响。您确定服务器会关闭生产服务器上的文件吗?您的生产服务器上可能有什么东西阻止了web应用程序完全生成文件。

    您是否在服务器上运行防病毒软件?它可能正在扫描该文件,因为它是一个新文件

    我附和上面PITADeveloper关于Dispose的评论。我将进一步说明,您应该确保您创建的每个实现IDisposable的对象都对其进行了Dispose调用。如果要创建它,则必须对其进行处置:

    using (var resource = ResourceType.Create())
    {
        // Use the resource
    }   // resource.Dispose called here even if your code throws an exception