2010-12-15 12 views
9

Global.aspx内のApplication_End()の間、HttpContext.Currentはnullです。私はまだキャッシュにアクセスできるようにしたいと思っています -のメモリにはがありますので、何とかディスクにビットを保存するために参照できるかどうか確認してください。C#ASP.NET:HttpContext.Currentが利用できないときにキャッシュにアクセスする方法(null)?

質問 - HttpContext.Currentがnullの場合、メモリにキャッシュを参照する方法はありますか?

HTTP要求(擬似:"static <pointer X>" = HttpRequest.Current)で更新可能なキャッシュへのポインタを格納し、Application_End()でそのポインタを介してキャッシュへの参照を取得するグローバル静的変数を作成する可能性がありますか?

Httpリクエストがないときにメモリ内のキャッシュにアクセスする方法はありますか?

答えて

4

Application_Endイベントの内部では、すべてのキャッシュオブジェクトはすでに破棄されています。 キャッシュオブジェクトが破棄される前にキャッシュオブジェクトにアクセスするには、次のようにキャッシュオブジェクトを追加する必要があります。

名前空間のインポートSystem.Web.オブジェクトを追加するアプリケーションへのキャッシングキャッシュ。このアプローチは、あなたのために右でない場合は私に知らせてください

private void RemovedCallback(string key, object value, CacheItemRemovedReason reason) 
{ 
    //Use your logic here 

    //After this method cache object will be disposed 
} 

//Add callback method to delegate 
var onRemove = new CacheItemRemovedCallback(RemovedCallback); 

//Insert object to cache 
HttpContext.Current.Cache.Insert("YourKey", YourValue, null, DateTime.Now.AddHours(12), Cache.NoSlidingExpiration, CacheItemPriority.NotRemovable, onRemove); 

そしてこのオブジェクトが配置されようとしている次のような方法と呼ばれます。 あなたの質問にお役に立てば幸いです。

よろしくお願いいたします。

24

あなたはスコットによるHttpRuntime.Cache

http://www.hanselman.com/blog/UsingTheASPNETCacheOutsideOfASPNET.aspx

経由でアクセスすることができるはず - あなたにも、常にそれにアクセスするかもしれないので - リフレクターHttpContext.Current.Cacheだけ呼び出すHttpRuntime.Cacheを見てこちらです。

9

私のために働いているSystem.Web.Caching.Cacheオブジェクトを返すために、次のゲッターを使用しています。基本的にはジェームズやつれをバックアップしますが、当然の

get 
{ 
    return (System.Web.HttpContext.Current == null) 
     ? System.Web.HttpRuntime.Cache 
     : System.Web.HttpContext.Current.Cache; 
} 

は、アプリケーションの終了でキャッシュを得るのを助けるために起こっています。

編集:Scott HanselmanのJamesのブログに載っているコメントの1つで、これを手に入れました!

関連する問題