这是我的问题。 我正在使用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并再次开始计数。我在哪里出错。任何建议将不胜感激。 感谢。
答案 0 :(得分:0)
我认为这句话是错误的:
WCFService.RCRServer.Sum=sum;
因为它不是标准的WCF调用,而是属性调用。为了通过WCF调用链接属性,您需要使用Operation Contract属性显式标记getter和setter,但由于接口不能通过静态构造实现,我会说实际调用的是其他东西
尝试实现名为UpdateSum(int sum)的WCF方法,该方法增加静态变量并调用该方法。