我在.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对我很重要。
谢谢
答案 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))