2010-08-19 110 views
0

這是一個有趣的問題。我正在開發一個網絡聊天軟件,在過去的幾個小時裏,我一直在試圖弄清楚爲什麼會發生這種情況。基本上,我開始聊天時添加一個實際的聊天對象(進行通信的部分)到緩存集合。爲了檢測到你關閉了窗口,我將滑動過期設置爲10-30秒。我還設置回調讓聊天客戶端知道他需要斷開連接才能結束聊天會話。出於某種奇怪的原因,當我使用代碼來處理聊天客戶端時,無論它是什麼,它都會導致整個w3svc進程崩潰(檢查事件日誌)。我還嘗試在項目被刪除時發送給我自己的電子郵件,這有效。我甚至試圖把整個代碼放在try-catch塊中,但它似乎也忽略了這一點。有任何想法嗎? O_oCacheItemRemovedCallback導致web服務器崩潰

UPD:不,我不試圖刷新對象(in reference to this)。

添加:

HttpContext.Current.Cache.Insert("ChatClient_" + targetCid + HttpContext.Current.Session.SessionID, cl, null, Cache.NoAbsoluteExpiration, 
        TimeSpan.FromSeconds(15), CacheItemPriority.Normal, new CacheItemRemovedCallback(removeMyself)); 

刪除:

public static void removeMyself(string key, Object value, CacheItemRemovedReason reason) { 
     var wc = (WebClient)value; 
     try { 
      wc.Remove(); 
     } 
     catch { } 
    } 

我實際上是使用上HttpContext.Current.cache鎖增加了高速緩存對象時。

回答

0

你可以發佈cache.insert和物品刪除回調代碼?插入緩存時是否使用了任何類型的鎖定?你有沒有對ASP.net緩存的默認設置做任何事情?你能否在另一臺網絡服務器上重現這一點?你確定你要在ms而不是秒過期緩存...

你的滑動過期是這樣嗎? TimeSpan.FromSeconds(30)