2011-03-05 4 views
0

다음과 같은 WCF 서비스 설정이 있습니다.WCF 설정 동시성 및 코드 검사

InstanceContextMode = InstanceContextMode.PerCall, 들면, ConcurrencyMode = ConcurrencyMode.Multiple

내 방법은 다음과 같이;

public List<MessagesAPI> GetInboxMessagesByUserID(string UserID) 
    { 
     int intUserID = 0; 

     if (!String.IsNullOrEmpty(UserID)) 
      intUserID = int.Parse(UserID); 

     List<MessagesAPI> listMessages = new List<MessagesAPI>(); 
     UserMessageCache userMessageCache = new UserMessageCache(); 

     ApiHelper apiHelper = new ApiHelper(); 
     string strUserTimeZone = apiHelper.GetUsersTimeZone(intUserID); 

     listMessages = userMessageCache.APIGetUserInboxMessagesByUserID(intUserID, strUserTimeZone); 

     return listMessages; 
    } 

나는 문제가있을 가능성이 높습니다. 잠글 필요가 있거나 코드를 작성하는 것이 좋습니다.

답변

1

InstanceContextMode.PerCall과 함께 ConcurrencyMode.Multiple을 사용하는 것은 의미가 없습니다. InstanceContextMode.PerCallConcurrencyMode.Single과 동일합니다. 그 이유는 InstanceContext 모드가 서비스 인스턴스를 결정하는 방법을 결정하고 ConcurrencyMode은 단일 서비스 인스턴스에서 처리 할 수있는 동시 요청 수를 결정하기 때문입니다. InstanceContextModePerCall으로 설정하면 각 요청에 자체 서비스 인스턴스가 있으므로 명시 적으로 여러 개의 동시 요청을 처리하는 서비스 인스턴스가 하나만있을 수 있습니다.

+0

@ ladislav-mrnka는 InstanceContextMode 만 설정해야합니까? – pmillio

+0

@pmillio : 네, 그렇지 않으면'InstanceContextMode'를 설정할 필요가 없을 것입니다. basicHttp 또는 webHttp와 같은 일부 바인딩의 경우 'PerCall'기본값입니다. –

2

InstanceContextMode은 서비스 유형의 새 인스턴스가 생성되는시기를 결정하고 ConcurrencyMode은 동시에 처리 할 수있는 요청 수를 결정합니다. 즉, 귀하의 설정에 따라 각각의 요청이 자체 서비스 인스턴스를 갖는 경우 여러 요청을 처리 할 수 ​​있습니다.

정적 인 멤버가 표시되지 않으므로 스레드 안전성 측면에서 "문제"가 없어야합니다 (비록 내가 다른 클래스 정의 됨). 그러나 요청로드에 따라 요청 당 새 인스턴스를 생성하기 때문에 성능 문제가 발생할 수 있습니다.

참고로 공유 리소스가있을 때 일반적으로 스레드 안전성에 대해 걱정할 필요가 있습니다. 그렇기 때문에 각 요청이 자체 인스턴스에 의해 서비스되고 있음에도 정적 멤버를 언급 한 이유는 무엇입니까?

+0

감사합니다. 클라우드에 올려 놓았습니다. 도움이 될 것입니다. 미안해, 내 질문이 어리 석다. – pmillio