ISAPI或ASP.NET中的内存映射文件 - FileNotFoundException

时间:2011-02-15 11:56:55

标签: c# asp.net isapi filenotfoundexception

我在.NET4中编写一个以这种方式生成内存映射文件的程序: MemoryMappedFile.CreateNew(“TEST”,int.MaxValue))

我已经在IIS7上创建了ISAPI模块,该模块将读取MemoryMappedFile,但不幸的是它不起作用,我收到错误: System.IO.FileNotFoundException:无法找到指定的文件。

本程序与IIS7在同一台PC上,IIS与我的程序在同一用户上工作。如果我将我的代码从ISAPI放到另一个程序中,我可以毫无问题地阅读MemoryMappedFile。

当我在ASP.NET中使用我的代码(读取MemoryMappedFile)时会出现同样的问题。看起来IIS在系统应用程序和ISAPI或ASP.NET之间阻止了MemoryMappedFile。

如何解决? MemoryMappedFile对我很重要。

谢谢

2 个答案:

答案 0 :(得分:2)

如果无法查看相关代码,我可以提出一些调查途径:

  • 您是否确定在尝试通过ISAPI扩展程序访问它时句柄仍然存在?如果创建该文件的进程不再运行,它将被垃圾收集并且将无法找到。您可以使用Process Explorer(http://technet.microsoft.com/en-us/sysinternals/bb896653)搜索内存映射文件(它将显示为“section”类型的句柄)。

  • 如果这不起作用,请尝试让您的ISAPI扩展分配自己的内存映射文件,看看它是否可以读取它自己的文件。

  • 尝试为内存映射文件分配较低容量 - 将容量设置为4 GB,如示例中所示可能是问题。

答案 1 :(得分:0)

问题可能是名称空间问题,即尝试在两个会话之间按名称共享相同的内存映射文件的结果。当IIS作为服务运行时,它在会话0'中运行,而其他用户应用程序将在不同的交互式会话中运行。每个会话都有自己的命名资源命名空间(如内存映射文件)。

尝试预先" Global \"到文件名,如:

MemoryMappedFile.CreateNew(@"Global\TEST", int.MaxValue))