2011-02-09 3 views
2

현재 Silverlight 4 응용 프로그램에서 MEF를로드 온 디맨드 Xaps에 성공적으로 사용하고 있습니다. 캐싱을 사용하여 성능을 향상시키고 자합니다. MEF가 WebClient를 사용하여 브라우저의 다운로드 메커니즘을 사용하는 Xap을 다운로드한다는 것은 제 이해입니다. 따라서 캐싱 정책이 적용됩니다.Silverlight, MEF, 주문형 Xap로드 및 캐싱 이해

제 테스트에서 보았던 결과는 약간 혼란스럽고 브라우저마다 결과가 다릅니다. 분명히, 첫 번째 액세스에서 캐시를 지우면 온 디맨드 Xaps가 서버에 요청됩니다. 또한 응용 프로그램 세션 기간 동안 Xaps는 한 번만 다운로드됩니다. 지금까지 좋은 모든 것.

그러나 나는 Xaps가 사이에 캐시 될 것으로 기대했다. 그러나 아니요 - 나는 다음 (사용 피들러) 관찰 :

Internet Explorer를

I는 온 디맨드 라이트 XAP는 서버에서 요청하지 않는 브라우저 (Ctrl + F5)를 새로 고침 및로드 된 경우 로컬 캐시에서. 그러나 브라우저를 다시 시작하면 모든 것이 다시 다운로드됩니다. 우우. 그때 온 디맨드 라이트 XAP이 서버에서 다시 요청하는 페이지 (Ctrl + F5)를 새로 고치면

는 파이어 폭스와 크롬

- 캐싱은 전혀 발생하지 않는다. 우우. 그리고 분명히 브라우저를 다시 시작하면 캐싱이 발생하지 않습니다.

나에게 이상적인 동작은 브라우저가 Xap을로드해야 할 때 If-Modified-Since 헤더로 서버에 쿼리하여 새 버전이 있는지 확인하고 다운로드 한 경우 그렇지 않으면 로컬 캐시에서로드하십시오. 그러나 어느 테스트에도 If-Modified-Since 헤더가 서버로 전송 된 것을 볼 수 없었습니다. 그래서 내 질문 :

MEF를 사용하여 투명하게 달성 할 수있는 방법이 있습니까? 아니면 다른 프레임 워크? 아니면 격리 된 저장소 (yuck)를 ​​사용하여 내 캐싱 계층을 롤백해야합니까?

온 디맨드 Xap 로딩과 같은 방식으로 캐싱이 이루어지기 때문에 상자 밖에서 작동하는 것이 놀랍습니다.

답변

2

확인이 질문을 게시 한 직후에 알아 냈습니다. 다른 사람들이 문제가 생길 경우에 대비하여 여기에서 해결책을 공유 할 것입니다.

내 프로젝트를 호스트하기 위해 내장 된 Visual Studio 웹 서버를 사용하고있었습니다. 캐싱을 전혀 지원하지 않는 것으로 보입니다.

그것은 XAP를로드 할 필요가있을 때 나를 위해 이상적인 동작의 브라우저입니다 가를 조회 : 나는 IIS에서 내 프로젝트를 호스팅하지만 곧, 내가 특별히 내가 원하는 정확한 동작을 보았다 변경 한 경우 --때문에 헤더가 새 버전이 존재하는지 등을 을 다운로드하는 경우, 그렇지 않은 경우, 로컬 캐시

Internet Explorer에서 적어도에서로드하기 위해, I와 서버 If-Modified-Since 헤더를 보내고 304 Not Modified 응답을받는 것을 볼 수 있습니다. 최근 Xaps에 액세스했습니다. 완전한!

+0

당신이 알아 낸 것을 기쁘게 생각합니다. 참고로, IIS Express가 출시되면서 Visual Studio 웹 서버를 더 이상 사용할 이유가 확실하지 않습니다. –