2010-08-19 112 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)