1

这是我的问题。我正在使用 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 并再次开始计数。我在哪里出错了。任何建议将不胜感激。谢谢。

4

1 回答 1

0

我认为这条线是错误的:

 WCFService.RCRServer.Sum=sum;

因为它不是标准的 WCF 调用,而是属性调用。为了通过 WCF 调用链接属性,您需要使用 Operation Contract 属性显式标记 getter 和 setter,但由于接口不能由静态构造实现,我会说实际调用的是其他东西。

尝试实现一个名为 UpdateSum(int sum) 的 WCF 方法,该方法增加静态变量并调用该方法。

于 2012-10-01T16:03:12.190 回答