2011-02-15 61 views
1

我寫在.NET4程序生成內存映射文件中是這樣的:MemoryMappedFile.CreateNew( 「TEST」,int.MaxValue))內存映射文件 - FileNotFoundException異常

我創建了安裝在IIS7上的ISAPI模塊,這個模塊會讀取MemoryMappedFile,但不幸的是它不起作用,我得到一個錯誤:System.IO.FileNotFoundException:無法找到指定的文件。

本程序與IIS7位於同一臺PC上,IIS與我的程序在同一用戶上工作。如果我將我的代碼從ISAPI放到另一個程序中,並且可以毫無問題地讀取MemoryMappedFile。

當我在ASP.NET中使用我的代碼(它讀取MemoryMappedFile)時,會出現同樣的問題。它看起來像IIS阻止系統應用程序和ISAPI或ASP.NET之間的MemoryMappedFile。

如何解決? MemoryMappedFile對我很重要。

感謝

回答

2

,而不能看有問題的代碼,我可以建議調查的一些途徑:

  • 你一定手柄仍然存在於你正試圖時間通過ISAPI擴展訪問它?如果創建該文件的進程不再運行,它將被垃圾收集並且不會被發現。您可以使用Process Explorer(http://technet.microsoft.com/en-us/sysinternals/bb896653)搜索您的內存映射文件(它將顯示爲「節」類型的句柄)。

  • 如果這不起作用,請嘗試讓ISAPI擴展分配它自己的內存映射文件,並查看它是否可以讀取它自己的文件。

  • 試着爲內存映射文件分配一個較低的容量 - 將容量設置爲4 GB,這可能是問題所在。

+0

我覺得int.max會有問題。這是很多的記憶!你嘗試了更小的東西嗎? – TravisWhidden 2012-08-24 22:28:26

0

問題可能是命名空間問題,即嘗試在兩個會話之間通過名稱共享相同的內存映射文件的結果。由於IIS作爲服務運行,因此它運行在「會話0」中,而其他用戶應用程序將運行在不同的交互式會話中。每個會話都有自己的命名空間用於命名資源(如內存映射文件)。

嘗試在前面加上 「全球\」 的文件名,如:

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