2010-05-13 3 views
7

내 ASP.NET 응용 프로그램에서 캐시되고 싶은 외부 리소스를 가져 오기 위해 HttpWebRequest를 사용합니다. 다음 코드를 고려하십시오HttpWebRequest가 ASP.NET 환경에서 캐시를 사용하도록 강제하는 방법은 무엇입니까?

var req = WebRequest.Create("http://google.com/"); 
req.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.CacheIfAvailable); 
var resp = req.GetResponse(); 
Console.WriteLine(resp.IsFromCache); 
var answ = (new StreamReader(resp.GetResponseStream())).ReadToEnd(); 
Console.WriteLine(answ.Length); 

의 HttpWebRequest는 IE 캐시를 사용, 나는 (작은 cmd를 테스트 응용 프로그램에서) 일반 사용자로 실행 그렇게 할 때, 데이터는 %userprofile%\Local Settings\Temporary Internet Files에 캐시되고 다음 응답은 캐시에서 읽습니다.

ASP.NET 응용 프로그램에서 이러한 코드를 실행하면 데이터가 ...\ASPNET\Local Settings\Temporary Internet Files에 캐시되지만 캐시가 사용되지 않는다고 생각했습니다.

내가 뭘 잘못하고 있니? HttpWebRequest가 ASP.NET 환경에서 캐시를 사용하도록 강제하는 방법은 무엇입니까?

+0

어떤 계정 ASP.NET 응용 프로그램이 실행되고 :

이 문서는 우리의 캐시 문제 해결에 유용? 해당 계정으로 캐시가 생성됩니다. – feroze

+0

@feroze : 앱이 ASPNET 계정으로 실행 중이며 Environment.SpecialFolder.InternetCache를 검사하여 임시 인터넷 파일 경로를 알고 있습니다. 문제는 캐시 항목이 만들어지는 위치를 모르지만 전혀 만들어지지 않습니다. – piotrsz

+0

응답 개체를 닫고 처리 할 줄을 추가 할 수 있습니까? resp.Close(); 그래도 문제가 계속 발생하는지 확인하십시오. – feroze

답변

0

내가 틀릴 수도 있지만 HttpWebRequest은 명시된 욕망에 관계없이 리소스의 캐시 헤더를 존중합니다.

응답 헤더를 확인하고 리소스가 명시 적으로 캐시되지 않도록 요청하는지 확인하십시오.

+1

헤더가 너무 의심되어 동일한 리소스에 httprequest를 만드는 작은 cmd 응용 프로그램을 빌드합니다. cmd 응용 프로그램에서는 캐시됩니다. 그리고 ASP.NET 응용 프로그램에서는 그렇지 않습니다. – piotrsz

1

는이 같은 코드에서 수동으로 캐시를 사용할 수 있습니다 당신의 Web.config에서와 캐싱을 사용하는 것처럼

Cache.Insert("request", req, Nothing, DateTime.Now, TimeSpan.FromSeconds(30), TimeSpan.Zero) 

당신은이 방법을 사용할 수 있습니다.

+0

아마도 사용자 정의 캐시 구현을 끝내 겠지만 간단하게 "즉시 사용할 수있는"솔루션을 원했습니다 ... – piotrsz

+0

문제 해결을위한 문제는 없을 것이라고 생각하지만 큰 문제는 아닙니다. 도구. – MUG4N

1

이 스레드는 오래된 스레드이지만이 문제와 관련하여 고려해야 할 또 다른 사항은 ASP.NET 응용 프로그램이 실행되는 사용자 계정의 IE 보안 설정입니다. 원격 호스트를 신뢰할 수있는 사이트 목록에 추가 할 때까지 HTTP 캐싱 (CachePolicy.Level = Default, HTTP 캐시 가능 리소스)이 응용 프로그램에서 작동하지 않았습니다. http://blogs.msdn.com/b/ieinternals/archive/2011/03/19/wininet-temporary-internet-files-cache-and-explorer-folder-view.aspx

관련 문제