1

この方法でメモリ マップ ファイルを生成するプログラムを .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 は私にとって重要です。

ありがとう

4

2 に答える 2

2

問題のコードを見ることができなくても、調査のいくつかの方法を提案することができます。

  • ISAPI拡張機能を介してハンドルにアクセスしようとしたときに、ハンドルがまだ存在していることを確認しますか?ファイルを作成したプロセスが実行されていない場合、ファイルはガベージコレクションされ、見つかりません。Process Explorer(http://technet.microsoft.com/en-us/sysinternals/bb896653)を使用して、メモリマップトファイルを検索できます(「セクション」タイプのハンドルとして表示されます)。

  • それでも問題が解決しない場合は、ISAPI拡張機能に独自のメモリマップファイルを割り当ててもらい、独自のファイルを読み取れるかどうかを確認してください。

  • メモリマップトファイルに低い容量を割り当ててみてください。例のように容量を4GBに設定すると、問題が発生する可能性があります。

于 2011-02-16T05:05:38.367 に答える
0

この問題は名前空間の問題である可能性があります。これは、2 つのセッション間で同じメモリ マップト ファイルを名前で共有しようとした結果です。IIS はサービスとして実行されているため、「セッション 0」で実行されますが、他のユーザー アプリケーションは別の対話型セッションで実行されます。各セッションには、名前付きリソース (メモリ マップ ファイルなど) 用の独自の名前空間があります。

次のように、ファイル名の先頭に「Global\」を追加してみてください。

MemoryMappedFile.CreateNew(@"Global\TEST", int.MaxValue))
于 2015-10-06T20:17:00.283 に答える