私の開発環境で、Caching Application Block の CacheFactory を呼び出すと IIS がクラッシュするという問題が発生しています。実行しようとするたびに IIS がクラッシュする非常に単純な Web アプリケーションを作成しましたが、アプリケーションは Visual Studio.NET Web サーバーで正常に動作します。
次のコードは、IIS での実行時にアプリケーションがクラッシュする原因です。
protected void Page_Load(object sender, EventArgs e)
{
try
{
ICacheManager cm = CacheFactory.GetCacheManager("foo");
Response.Write(cm.GetHashCode());
}
catch(Exception ex)
{
Response.Write(Server.HtmlEncode(ex.ToString()));
}
}
私はここでストローをつかんでいますが、誰かが同様の行動を見たことがありますか? しばらくの間、「保護されたメモリを読み書きしようとしました。これは多くの場合、他のメモリが破損していることを示しています。」と表示されていました。エラーが発生しましたが、今はクラッシュしています。上記のコード例では、w3wp.exe プロセスが単に失敗するため、IIS で実行するとキャッチに到達しません。これが発生すると、イベント ログに次のエントリが記録されます。
アプリケーション プール 'WebApplication1' を提供するプロセスで、Windows プロセス アクティベーション サービスとの致命的な通信エラーが発生しました。プロセス ID は「1944」でした。データ フィールドにはエラー番号が含まれます。
Enterprise Library を再インストールし、aspnet_regiis.exe を再実行しましたが、無駄でした。また、Web サーバーの役割を削除して再インストールしようとしましたが、どちらもうまくいきませんでした。
私の開発環境に関するメモ:
- VirtualBox 4.0.4 の下の Windows Server 2008 R2 x64 Web Edition で VS.NET 2010 SP1 Beta を実行する
- エンタープライズ ライブラリ 5.0 の使用
- ごく最近まで、この開発サーバーのすべてが正常に動作していました。
- この時点で、bcdedit.exe を使用してデータ実行防止がオフになっています。
編集
この問題を .NET 4.0 Framework の問題に絞り込みました。3.5 Framework に対して Web アプリケーションをビルドすると期待どおりに動作しますが、4.0 Framework に対してビルドすると、Web アプリケーションの実行時に IIS がクラッシュします。