2011-11-07 2 views
0

SQL Server 2005 데이터베이스 백엔드가있는 ASP.NET MVC 3 응용 프로그램이 있습니다. LINQ to SQL을 사용하여 데이터베이스에 연결됩니다. 경우에 따라 데이터베이스는 응용 프로그램에 의해 업데이트되지만 때로는 캐시되지 않아야하는 이전 데이터도 캐시됩니다.ASP.NET MVC 3에서 출력을 잘못 캐싱합니다.

예를 들어, 사용자가 BlogEntryComment (내 LINQ to SQL 유형 중 하나)을 게시하는 양식을 채우면 데이터베이스에 추가됩니다. 그러나 새로운 BlogEntryComment은 요청한 내보기에 표시되지 않습니다. 또한 BlogEntryComment을 제거하면 여전히보기에 표시됩니다. 다음은이 동작에 대해 내가 결정한 내용입니다.

  • 브라우저 캐싱이 원인이 아닙니다. 나는 캐시를 지웠다. 다른 브라우저와 다른 컴퓨터에서 동시에 시도했습니다. 아무 소용이 없습니다.

  • BlogEntry 유형과 같은 '최상위 수준'유형에서는 문제가 발생하지 않습니다. 내 "최상위 수준"유형과의 관계 (많은 의견에 BlogEntry)가있는 BlogEntryComment과 같은 유형의 경우 발생합니다.

  • 서버를 다시 시작하거나 다른 서버에서 시도하면 캐시가 무엇이든지간에 캐시를 지우는 것처럼 보이며 오류가 발생하지 않습니다.

  • 결국 업데이트 된 데이터가 표시되지만 최종적으로 표시 되려면 최대 15 분이 걸립니다.

    ... 
    <system.web> 
        ... 
        <caching> 
         <outputCache enableOutputCache="false" enableFragmentCache="false"> 
         </outputCache> 
        </caching> 
        <httpRuntime enableKernelOutputCache="false" /> 
    </system.web> 
    <system.webServer> 
        ... 
        <caching enabled="false"> 
        </caching> 
    </system.webServer> 
    ... 
    

    을 ...하지만 운 :

난의 Web.config에서 찾을 수 있었다 캐시 옵션의 모든 종류를 해제하는 것을 시도했다. 어떤 아이디어?

+0

데이터를 어떻게 받습니까? 당신은 어딘가에있는 당신의 L2 인터페이스를 캐시하고 있지 않습니까? – Nik

+0

@Nik : 전체 응용 프로그램에 대한 DataContext의 싱글 톤 인스턴스 (클래스의 정적 멤버)가 있습니다. 모든 컨트롤러는 데이터 용으로이 하나의 DataContext로 이동합니다. – walterbing1

답변

2

l2s DataContext에 대한 설명서를 확인하십시오. 즉, 모든 http 요청을 작성하고 처리하는 등 짧은 시간을 의미합니다. 설명대로 정적이라면 앱 도메인만큼 오래 살 수 있습니다.

가장 가능성있는 일은 DC가 메모리에 남아 있고 데이터에 대한 후속 요청이 db에 전달되지 않는다는 것입니다. 15 분이 지나면 앱 도메인이 재활용되어 새로운 DC와 새로운 데이터를 얻게됩니다.

+1

완벽하게 작동합니다. 매번 새로운 DataContext 객체를 생성하고 있습니다. 감사! – walterbing1

1

[OutputCache] 장식에 대한 작업을 확인하십시오. 그것은 web.config을 무시합니다.

관련 문제