2010-08-19 6 views
0

이것은 흥미로운 질문입니다. 나는 웹 채팅 소프트웨어를 개발 중이고 지난 몇 시간 동안 나는 왜 이런 일이 일어나는지 알아 내려고 노력했다. 기본적으로 채팅을 시작할 때 실제 채팅 개체 (통신을 수행하는 부분)를 Cache 컬렉션에 추가합니다. 창을 닫았 음을 감지하기 위해 슬라이딩 만료를 10-30 초로 설정합니다. 또한 콜백을 설정하여 채팅 클라이언트가 채팅 세션을 종료하기 위해 연결을 끊어야한다고 알려줍니다. 어떤 이상한 이유 때문에 채팅 클라이언트를 처분하기 위해 코드를 사용하면 무엇이든지간에 w3svc 프로세스 전체가 중단됩니다 (이벤트 로그가 확인 됨). 나는 또한 아이템이 제거되었을 때 이메일을 보내려고 노력했다. 나는 전체 코드를 try-catch 블록에 넣으려고 시도했지만 심지어 무시할 것으로 보인다. 어떤 아이디어? O_oCacheItemRemovedCallback으로 인해 웹 서버가 손상됩니다.

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와 item removed 콜백 코드를 게시 할 수 있습니까? 캐시에 삽입 할 때 어떤 종류의 잠금을 사용하고 있습니까? ASP.net 캐시의 기본 설정을 수행 했습니까? 다른 웹 서버에서 이것을 재현 할 수 있습니까? 초 대신 ms로 캐시를 만료 하시겠습니까?

슬라이딩 만료가 이렇게 되었습니까? TimeSpan.FromSeconds (30)

관련 문제