2013-03-05 4 views
2

첫 번째 WCF 서비스를 만들려고하고 있는데 응용 프로그램 데이터를 저장하려고합니다.WCF 서비스에 응용 프로그램 수준 데이터 저장

ServiceContracts 및 DataContracts를 만들고 서비스가 작동 중입니다.

이제는 데이터베이스에서 일부 구성 데이터를 읽고이 데이터를 응용 프로그램 범위에 저장하여 서비스가 살아있는 한 모든 후속 요청에서 데이터를 사용할 수있게하려고합니다. 그렇게하면 요청을 처리 할 때마다 데이터베이스에 연결할 필요가 없습니다. 나는 설정 파일에 데이터를 저장하고 싶지 않다. 데이터는 이미 DB에 있고 나는 그것을 복제하고 싶지 않다.

다음과 같이 구현되어 작동합니다.

참고 1 : 샘플을 간단하게 유지하기 위해 데이터베이스 코드를 제거했습니다.

참고 2 : MemoryCache 클래스는 System.Runtime.Caching 네임 스페이스 내에 있습니다.

private void LoadConfigData() 
{ 
    if (!MemoryCache.Default.Contains("ConfigData")) 
    { 
     CacheItemPolicy cachePolicy = new CacheItemPolicy() { 
        AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(5) }; 

     MemoryCache.Default.Add(
        "ConfigData", 
        "ImagineThereIsDBDataHere", 
        cachePolicy); 
    } 
} 

이 방법을 사용하는 것이 올바른 방법입니까?

이 포스트가 응용 프로그램 클래스와 HttpContext를 사용하여 언급 :

Read Global Application property from WCF Service

을하지만 나는 현재 내 프로젝트에이 가능한 중 어느 것도 있습니다.

이 스레드는 안전합니까? 내 서비스에 대한 요청이 여러 개 있고 캐시가 비어 있으면 경합 조건이 생깁니 까?

이것은 내 첫 번째 질문이기 때문에 세부 사항을 놓친 경우 알려 주시면 업데이트하겠습니다.

감사합니다.

답변

3

개체의 AddOrGetExisting 메서드 (또는 this 재정의)를 사용하면 스레드로부터 안전하게이 작업을 수행 할 수 있습니다.

Application 또는 HttpContext 클래스에 대해 걱정하지 마십시오. System.Web 네임 스페이스에 있으며 WCF에서의 사용은 바람직하지 않습니다. 당신은 이미 옳은 일을하고 있습니다.

관련 문제