【发布时间】:2013-12-03 23:28:39
【问题描述】:
按照this 网站的代码示例,我创建了一个 Windows 控制台应用程序,该应用程序创建了一个映射内存文件:
using (var file = MemoryMappedFile.CreateNew("myFile", 24))
{
var bytes = new byte[24];
for (var i = 0; i < bytes.Length; i++)
bytes[i] = (byte)(65 + i);
using (var writer = file.CreateViewAccessor(0, bytes.Length))
{
writer.WriteArray<byte>(0, bytes, 0, bytes.Length);
}
Console.WriteLine("Run memory mapped file reader before exit");
Console.WriteLine("Press any key to exit ...");
Console.ReadLine();
}
在一个新的 asp.net web 应用程序中,我使用代码读取了 MMF:
protected void Page_Load(object sender, EventArgs e)
{
string sOutput = "";
using (var file = MemoryMappedFile.OpenExisting("myFile"))
{
using (var reader = file.CreateViewAccessor(0, 24))
{
var bytes = new byte[24];
reader.ReadArray<byte>(0, bytes, 0, bytes.Length);
for (var i = 0; i < bytes.Length; i++)
sOutput += (char)bytes[i] + " ";
}
}
Response.Write(sOutput);
}
在开发 IIS Express 中,文件按预期读取,页面显示映射内存文件中的数据。
但是,当部署到 IIS 时,我在 locationMemoryMappedFile.OpenExisting("myFile") 得到异常 System.IO.FileNotFoundException
我尝试将应用程序池标识更改为与运行 MMF 控制台应用程序的相同,但这并没有奏效。
【问题讨论】:
-
myFile 在哪里?
-
生产 IIS 上是否安装了 ISAPI 模块?
-
在
Page_Load你打电话给MemoryMappedFile.OpenExisting。但是您在 Web 应用程序中有MemoryMappedFile.CreateNew方法调用吗? -
CreateNew在创建 MMF 的控制台应用程序中被调用。在控制台应用程序运行时,您可以从另一个进程访问 MMF。使用 IIS Express 时就是这种情况,但不是标准 IIS -
ISAPI 模块已安装。
标签: asp.net .net iis ipc memory-mapped-files