2012-06-15 3 views
0

저는 Sitefinity를 통해 .NET 출력 캐싱을 사용하는 복잡한 웹 사이트를 운영하고 있습니다. 최근에 사용자 위치에 따라 특정 사용자 정의 컨트롤에 다른 캐시 된 버전이 있어야했습니다. 그래서 사용자 컨트롤에 VaryByCustom이 설정된 OutputCache 지시문을 설정하고 Global.asax에서 GetVaryByCustomString 메서드를 오버라이드하여 사용자 위치를 가져 왔습니다. 문제는 간단한 테스트 케이스에서도 작동하지 않는다는 것입니다. 우리는 Sitefinity 컨텍스트 외부에서이 사용 사례를 테스트하여 .aspx 페이지가 포함 된 새 프로젝트를 만들고 그 안에 새 .ascx 사용자 정의 컨트롤을 배치하여 문제의 원인인지 확인했습니다. 페이지에는 컨트롤뿐만 아니라로드시 현재 시간을 가져 오는 레이블이 있습니다. 컨트롤에는 현재 시간을 렌더링하는 레이블도 있습니다.사용자 정의 컨트롤의 OutputCache가 작동하지 않습니다.

<%@ OutputCache Duration="60" VaryByParam="none" %> 

이 설정 제어 : :이 설정 페이지 OutputCache를 제공하는 경우

<%@ OutputCache Duration="60" VaryByParam="none" VaryByCustom="browser" %> 

예상되는 기능은 발생하지 않습니다. 두 개의 서로 다른 브라우저에서이 페이지를 열면 두 번째 레이블에 두 번 다른 시간이 표시됩니다. 내가 여기서 뭔가를 완전히 놓치고 있니? .NET 캐싱을 처음 사용하기 때문에 전적으로 가능합니다.

public override string GetVaryByCustomString(HttpContext context, string custom) 
    { 
     if (custom == "custom") 
     { 
      // return custom logic 
     } 
     else 
     { 
      return base.GetVaryByCustomString(context, custom); 
     } 
    } 
+0

2 개의 서로 다른 브라우저를 사용하면 100 % 확신 할 수 있습니다. –

+0

Chrome 및 IE8에서 열었고 같은 캐시 된 버전 – rpf3

답변

0

그런 다음 캐시가 다른 주요 버전 + 브라우저와 각 브라우저별로 달라야합니다

<%@ OutputCache Duration="60" VaryByParam="none" VaryByCustom="browser" %> 

를 사용하는 경우 :

감사

다음

는 GetVaryByCustomString의 내 우선이다 유형. 그래서 파이어 폭스 3.5.0과 파이어 폭스 3.6.0은 동일하지만 파이어 폭스 3.5와 파이어 폭스 2.0은 다르게 보일 것이다.

.NET을 사용하는 대신 브라우저를 처리하기 위해 실수로 HttpApplication.GetVaryByCustomString을 global.asmx에 오버로드 한 적이 없다고 가정합니다.

+0

을 사용하지 않았습니다. 과부하 상태에서 유일한 값은 맞춤 값인지 확인한 것입니다. 그렇지 않으면 기본 메서드로 컨트롤을 반환했습니다. – rpf3

+0

코드를 붙여 넣을 수 있습니까? –

+0

은 GetVaryByCustomString 코드를 포함하도록 편집되었습니다. – rpf3

관련 문제