2011-10-07 5 views
0

전달 된 인수로 웹 서비스가 반환 한 데이터를 어떻게 캐시 할 수 있습니까? 예를 들어인수로 웹 서비스 캐쉬

:

[WebMethod] 
[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public string FunctionThatReturnsSomething(int param1){ 
    ... does something 
return strResult; 

} 

내가 원하는 것은 반환 된 웹 서비스는 데이터 캐시,하지만 매개 변수 값 (INR의 PARAM1)에 따라됩니다 반환한다는 것입니다. 예를 들어, webservice 함수가 '1'의 값을 얻는다면, 그 결과를 캐시 할 것입니다. 함수가 param1에 대해 '2'정수를 얻으면 다른 결과를 캐시합니다.

참고 : webmethod/webservice는 POST 메서드를 사용하여 Ajax 호출을 통해 호출됩니다.

답변

1

ASP.NET은 이런 종류의 일을 위해서 편리하게 Application Cache을 제공합니다. 그것은 간단한 형태의에서

, 당신은 다음과 같이 캐시에 데이터를 추가 할 수 있습니다 :

HttpRuntime.Cache["Key"] = "Value"; 

그래서 당신은 당신이 쉽게 반환 할 데이터 캐시 수 :

string cacheKey = "FunctionThatReturnsSomething_" + param1.ToString(); 

if (HttpRuntime.Cache[cacheKey] == null) 
{ 
    string myData = GetDataToReturn(param1); 

    HttpRuntime.Cache[cacheKey] = myData; 
} 

return (string)HttpRuntime.Cache[cacheKey]; 

을 또한 수 있습니다 CacheDependancy을 지정하십시오. 예를 들어 데이터가 로컬 파일을 기반으로하는 경우 해당 파일이 업데이트되면 캐시를 자동으로 지울 수 있습니다.

가 10 분 동안 사용하지 않은 경우는 예를 들어 당신이 특정 시간 후에 제거 캐시로 입력 데이터를 가질 수

:

HttpRuntime.Cache.Insert(cacheKey, myData, null, System.Web.Caching.Cache.NoAbsoluteExpiration, new TimeSpan(0, 10, 0)); 

또는 절대 시간에, 같은 10 당신이 그것을 추가 한 후 분 :

HttpRuntime.Cache.Insert(cacheKey, myData, null, DateTime.Now.AddMinutes(10), 
System.Web.Caching.Cache.NoSlidingExpiration); 
+0

웹 메서드 위의 캐시 특성은 매개 변수를 고려하지만 100 % 확신해야한다고 생각합니다. 나는 사용하기 간단하기 때문에 속성을 선호합니다. –

+0

하하, 당연하지! 필자는 WebMethods가 User Controls 등과 같이 Output Caching을 사용할 수 있다는 사실을 완전히 잊어 버렸습니다. 프로그래밍 방식으로 캐시를 무효화해야하는 경우 [HttpResponse.RemoveOutputCacheItem] (http://msdn.microsoft.com/en-us/library/914c7ktw%28v=VS.90%29.aspx)을 참조 할 수도 있습니다. – Kasaku