2012-10-01 3 views
1

여기 내 문제입니다. wcf를 사용하여 간단한 클라이언트 서버를 구현하고 있습니다.이 서버는 클라이언트가 보낸 모든 값이 전체 합계에 추가되고이 합계가 서버에 연결된 모든 클라이언트에 반환되는 'sum'함수를 제공합니다. 이 함수wcf에서 정적 변수를 구현할 수 없습니다 C#

public void AddMessage(int num) 
    { 
     sum = sum + num; 
     //Go through the list of connections and call their callback funciton 
     subscribers.ForEach(delegate(IMessageCallback callback) 
     { 
      if (((ICommunicationObject)callback).State == CommunicationState.Opened) 
      { 
       Console.WriteLine("Calling OnMessageAdded on callback ({0}).", callback.GetHashCode()); 

       callback.OnMessageAdded(sum, DateTime.Now); 
      } 
      else 
      { 
       subscribers.Remove(callback); 
      } 
     }); 

    } 

입니다 이것은 서버가이 부분까지 아무 문제가 없습니다

public void OnMessageAdded(int sum, DateTime timestamp) 
    { 
     Console.WriteLine(sum+ ": " + timestamp.ToString("hh:mm:ss")); 
    } 

를 호출하는 콜백 함수입니다. 는 이제 클라이언트는 처음 서버가 포트 8000을 듣고 그 합을 얻는다하면, 여기에

8001에서 수신 서버를 업데이트 연락 할 다른 포트 (8001)에서 수행하는 코드를 클라이언트와 서버가있어 실행 시도 그.

//This is the function that the SERVER will call 
    public void OnMessageAdded(int sum, DateTime timestamp) 
    { 
     Console.WriteLine(sum + ": " + timestamp.ToString("hh:mm:ss")); 
     WCFService.RCRServer.Sum=sum; 
     Console.WriteLine("8001's sum " + WCFService.RCRServer.Sum); 
    } 

위에서 볼 수 있듯이 'sum'은 RCRServer의 정적 필드입니다. 이것이 어떻게 선언되어 있습니다.

 private static int sum =0; 

    public static int Sum 
    { 
     get { return sum; } 
     set { sum = value; } 

    } 

이 업데이트도 좋아 보입니다 문제는 포트 8000에 대한 연결이 손실되고 난 8001.I 클라이언트가 계속 있기 때문에이 서버의 정적 필드를 업데이트 할 것으로 예상 포트에서 동일한 서비스를 호출 할 때 시작이다 포트 8001, 클라이언트가이 서버 (8001)에서 함수를 호출하면 이전 합계를 사용할 수 있습니다.하지만 0으로 재설정되고 다시 카운트를 시작합니다. 여기에 잘못된 점이 있습니다. 모든 조언을 많이 주시면 감사하겠습니다. 감사합니다. .

+0

서비스 상태를 유지하는 것이 좋지 않은 경우 작업자 프로세스와 응용 프로그램 풀을 필요에 따라 재활용 할 수 있습니다. 훨씬 더 안정적인 옵션은 영구적 인 합계를 데이터베이스에 저장하는 것입니다. –

+0

포트 8000 및 8001에있는 서버가 별도의 프로세스입니까? –

+0

변수 이름 지정에주의를 기울여야합니다. 이제는 "sum"이라는 정적 변수가 있지만 함수는 "sum"매개 변수를 사용합니다. 올바른 변수로 작업하고 있습니까? – HaemEternal

답변

0

나는이 라인은 단지 잘못된 생각 :

WCFService.RCRServer.Sum=sum; 

는 표준 WCF 호출하지만 속성 호출 아니므로. WCF 호출을 통해 속성을 연결하려면 Getter와 Setter를 Operation Contract 속성으로 명시 적으로 표시해야하지만 정적 구성 요소로 인터페이스를 구현할 수 없으므로 실제로 호출되는 대상은 다른 것입니다.

정적 변수를 증가시키고 해당 메서드를 호출하는 UpdateSum (int sum)이라는 WCF 메서드를 구현하십시오.

+0

안녕하세요 @ 조지, 사실 정적 변수를 설정하고 있습니다. 그것은 WCF 함수 호출이 될 수 없습니다. 클라이언트가 8000에서 수신 대기중인 서버의 값을 업데이트하려고하면 서버에 여전히 연결되어 있습니다. 서버 프로세스에서 8001을 수신 대기 중입니다. – user1630812

+0

8000의 서버에서 SUM을 받으면 8001의 서버를 업데이트합니다. 그 라인을 사용하여 서버를 업데이트하려고 했으므로 실제로 어떻게 값을 업데이트합니까? 두 번째 서버? –

+0

WCFService.RCRServer 참조는 8001에서 수신하는 서버를위한 것입니다. 업데이트는이 줄로 끝납니다. – user1630812

관련 문제