无法在wcf C#中实现静态变量

时间:2012-10-01 15:22:25

标签: c# wcf static

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

1 个答案:

答案 0 :(得分:0)

我认为这句话是错误的:

 WCFService.RCRServer.Sum=sum;

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

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