2011-05-05 4 views
0

큰 데이터 집합을 처리하고 DB에 저장하는 일반 Windows 서비스가 있습니다. 또한이 Windows 서비스는 처리 된 데이터를 최대 하나 이상의 GUI에 제공하는 WCF 서비스를 호스팅하는 역할을합니다.WCF 서비스와 서비스를 호스팅하는 프로세스간에 캐시 된 데이터를 공유하려면 어떻게해야합니까?

현재 WCF 서비스는 클라이언트에 대한 데이터를 가져 오기 위해 DB를 한 번 이상 실행해야하지만 데이터 집합의 크기는 매우 느리며 중복으로 인해 많은 양의 메모리가 필요합니다 데이터의. 이상적으로는 데이터 처리 결과를 메모리에 직접 WCF 서비스와 공유하고 싶습니다. 이것을 할 수있는 방법이 있습니까?

답변

2

예, 분산 캐시 엔진을 사용합니다.

기본적으로 분산 캐시 엔진은 캐시를 관리하는 하나 이상의 시스템에서 실행되는 별도의 프로세스입니다. http://msdn.microsoft.com/en-us/library/ff383731.aspx

  • Memcachd - - http://memcached.org/, 윈도우 빌드 그 자체가 과정에서이 캐시 사이트는, 일반적으로 캐시 엔진은 데이터

    주요 옵션

  • 0

    예. singleton mode에 WCF 호스트를 만들어야합니다. 이 related question을 참조하십시오.

    +0

    싱글 톤 모드로 실행하면 멀티 스레딩 안전 코드를 많이 작성해야합니다 (전혀 쉽지 않음!). 주어진 시간에 하나만 처리하여 요청을 직렬화합니다. ** 둘 다 ** 좋은 옵션이 아닙니다. 실제로는 ... –

    +0

    그렇습니다. 확장 성이 좋지는 않지만 임시 솔루션으로 고려하고있는 옵션이었습니다. 캐시는 아마도 더 나은 장기적인 솔루션 일 것입니다. – Franchesca

    1

    사실, 내 동료가 정적 메서드를 통해 호스트에서 WCF 서비스에 액세스하는 것이 가능하다는 것을 알았고 사용자는 싱글 톤 모드의 rvice. 이 나쁜 사례로 간주되는 경우

    MyWcfService.PassMessageFromHostToService("I'm a message from your host"); 
    

    잘 모르겠어요, 또는 어떤 문제를 일으킬 경우 우리는 천국 ': 당신이 다음 메소드를 호출하기 위해이 작업을 수행 할 수있는 호스트 프로세스에서

    [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)] 
    public class MyWcfService : IMyWcfService 
    { 
        private static string messageFromHost; 
    
        public static void PassMessageFromHostToService(string message) 
        { 
         messageFromHost = message; 
        } 
    // Other methods fulfilling the service contract here... 
    } 
    

    t는 고려했지만 그것은 나를 위해 일하고있는 것 같습니다 :)

    관련 문제