문제

이 json 파일의 데이터를 쿼리하는 웹 서비스가 있지만 웹 서비스가 매번 파일에 액세스하는 것을 원하지 않습니다.나는 데이터를 다른 곳에(어쩌면 메모리에) 저장할 수 있어서 웹 서비스가 다음에 동일한 데이터를 쿼리하려고 할 때 거기에서 데이터를 가져올 수 있다고 생각하고 있습니다.무엇을 해야 하는지는 어느 정도 이해하지만 실제로 어떻게 해야 할지 잘 모르겠습니다.웹 서비스에서 데이터를 어떻게 유지합니까?

업데이트:캐싱 및 정적 변수 사용 제안 모두 좋아 보입니다.아마도 둘 다 사용해야 할 것 같아서 먼저 하나를 살펴보고, 거기에 없으면 두 번째 것을 사용하고, 거기에도 없으면 json 파일을 살펴보겠습니다.

도움이 되었습니까?

해결책

연장 기간 얼음^^열님의 생각에 따르면 캐시할 위치를 생각해 볼 수도 있습니다. 다음과 같이 애플리케이션 캐시에 json 파일의 내용을 캐시하거나 다음과 같이 하십시오.

Context.Cache.Insert("foo", _
                 Foo, _
                 Nothing, _
                 DateAdd(DateInterval.Minute, 30, Now()), _
                 System.Web.Caching.Cache.NoSlidingExpiration)

그런 다음 히트할 때마다 필요한 결과를 생성합니다.또는 함수 정의에서 웹 서비스 출력을 캐시할 수 있습니다.

<WebMethod(CacheDuration:=60)> _
Public Function HelloWorld() As String
    Return "Hello World"
End Function

다음에서 수집된 정보 XML 웹 서비스 캐싱 전략.

다른 팁

전역 또는 정적 컬렉션 개체를 사용하는 것은 어떻습니까?좋은 생각인가요?

ASP.NET 캐싱은 웹 서비스와 마찬가지로 작동하므로 여기에 설명된 대로 일반 캐싱을 구현할 수 있습니다. http://msdn.microsoft.com/en-us/library/aa478965.aspx

에코하려면 클루잉, JSON 데이터가 자주 변경되지 않을 것으로 예상되는 경우 이를 캐시하는 가장 간단한 방법은 DataTable과 같은 일종의 정적 컬렉션을 사용하는 것입니다.

먼저 JSON 데이터를 System.Data.DataTable로 구문 분석하고 웹 서비스 클래스에서 정적으로 만듭니다.그런 다음 정적 개체에 액세스합니다.IIS가 응용 프로그램 풀을 재활용할 때까지 데이터는 캐시된 상태로 유지되어야 합니다.

public class WebServiceClass
{
    private static DataTable _myData = null;
    public static DataTable MyData
    {
        get
        {
            if (_myData == null)
            {
                _myData = ParseJsonDataReturnDT();
            }
            return _myData;
        }
    }

    [WebMethod]
    public string GetData()
    {
        //... do some stuff with MyData and return a string ...
        return MyData.Rows[0]["MyColumn"].ToString();
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top