2012-10-12 5 views
3

최근 JSON 형식의 결과를 반환하는 비교적 간단한 WCF REST 서비스에서 개발을 시작했습니다. 처음에는 모든 것이 훌륭하게 작동했으며 서비스가 신속하게 가동되었습니다.InstanceContextMode.Single in WCF wsHttpBinding, webHttpBinding 및 REST

이 서비스의 주요 기능은 데이터베이스에서 추출한 많은 양의 데이터를 반환하는 것입니다. 이 데이터는 거의 변경되지 않으므로 작업 속도를 높이기 위해 캐싱 메커니즘을 설정하기로했습니다. 이를 위해 InstanceContextMode.Single과 ConcurrencyMode.Multiple을 설정하고 일부 스레드 잠금을 사용하여 정적 캐시 된 결과를 안전하게 반환하려고했습니다. 5 분마다 또는 IIS가 모든 것을 지우기로 결정할 때마다 데이터가 데이터베이스에서 다시 가져와집니다.

내 문제는 InstanceContextMode.Single이 예상대로 동작하지 않습니다. 내 이해 WCF 서비스 클래스의 단일 인스턴스를 만들고 유지 관리해야합니다. 그러나 내가 가진 행동은 클래스 당 완전히 새로운 인스턴스입니다. 여기에는 모든 정적 변수를 다시 초기화하는 작업이 포함됩니다.

내가있는 wsHttpBinding에 (REST에 사용)으로 WebHttpBinding에서 웹 서비스를 변경하고, SOAP의 설정으로 서비스를 사용했지만,이 정확히 같은 문제가 발생합니다.

내가 뭘 잘못하고 있니? 이것을 이해하려고 너무 오랜 시간을 보냈습니다.

도움이 될 것입니다!.

+1

서비스 정의 및 구성을 게시 할 수 있습니까? –

답변

0

이상한 일이 생기면 어떻게할까요?

ServiceThrottlingBehavior ThrottleBehavior = new ServiceThrottlingBehavior(); 
ThrottleBehavior.MaxConcurrentSessions = 1; 
ThrottleBehavior.MaxConcurrentCalls = 1; 
ThrottleBehavior.MaxConcurrentInstances = 1; 

ServiceHost Host = ... 
Host.Description.Behaviors.Add(ThrottleBehavior); 

귀하의 단일 서비스 인스턴스가 "단일"이 아니라는 것을 알고 계십니까? 프로파일 러에서 여러 데이터베이스 연결을 보았습니까? 왜 당신의 서비스가 단일 인스턴스가 아닌지 당신에게 제안한 것입니까? 서비스 운영 구현에서 별도의 스레드에서 일부 작업을 수행합니까?