这是我的问题。我正在使用 wcf 实现一个简单的客户端服务器。服务器公开了一个“sum”函数,其中客户端发送的任何值都被添加到全局总和中,并且这个总和返回给当时连接到服务器的所有客户端。这是功能
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"));
}
直到这部分没有问题。我现在尝试在不同的端口(8001)上运行客户端和服务器。客户端最初会联系监听端口 8000 的服务器,一旦得到总和,更新监听 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 上调用相同的服务。我预计由于客户端不断更新端口 8001 上服务器的静态字段,当客户端调用时此服务器上的功能(8001)旧总和将可用。但它被重置为 0 并再次开始计数。我在哪里出错了。任何建议将不胜感激。谢谢。