여기 내 문제입니다. 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으로 재설정되고 다시 카운트를 시작합니다. 여기에 잘못된 점이 있습니다. 모든 조언을 많이 주시면 감사하겠습니다. 감사합니다. .
서비스 상태를 유지하는 것이 좋지 않은 경우 작업자 프로세스와 응용 프로그램 풀을 필요에 따라 재활용 할 수 있습니다. 훨씬 더 안정적인 옵션은 영구적 인 합계를 데이터베이스에 저장하는 것입니다. –
포트 8000 및 8001에있는 서버가 별도의 프로세스입니까? –
변수 이름 지정에주의를 기울여야합니다. 이제는 "sum"이라는 정적 변수가 있지만 함수는 "sum"매개 변수를 사용합니다. 올바른 변수로 작업하고 있습니까? – HaemEternal