如何为所有客户端生成相同的输出

时间:2014-06-04 13:20:44

标签: c# wcf

我有一个生成数独游戏的服务,客户端应该是Windows Phone用户,我正在进行在线竞争。

问题#1 如何在20分钟内为特定时间内的所有客户(访问服务)生成相同的数独游戏。 我读到了这个,我尝试使用以下内容:

 [ServiceBehavior (InstanceContextMode = InstanceContextMode.Single,
               ConcurrencyMode = ConcurrencyMode.Single)] 

但它没有正常工作。

问题#2 是在特定时间后关闭所有客户端服务的方法。

感谢。

2 个答案:

答案 0 :(得分:3)

您可能已经想到,WCF服务的默认行为将为每个调用创建一个新的服务实现实例。这是有意的,因为上下文可能根据客户的身份而不同。我建议不要试图改变这种行为。

正如Guanxi所说,一个好的方法是实现一个静态缓存 - 就像一个单例,在超时20分钟后重新生成它。

示例C#代码:

public static class SudokuCache
{
    private static Sudoku _game;
    private static DateTime _timestamp;

    public static Sudoku Game
    {
        get {
            if (_timestamp.AddMinutes(20) < DateTime.Now) {
                _game = new Sudoku();
                _timestamp = new DateTime.Now;
            }
            return _game;
        }
}
}

public class Sudoku { }

通过这种方法,您的服务可以处理客户端身份验证/身份,保持分数等,并通过调用SudokuCache.Game提供新游戏。

与任何WCF一样,请确保使用DataContract / DataMember属性,以便正确序列化Sudoku对象。

答案 1 :(得分:0)

答案#1:生成Sudoko并使用时间戳将其缓存在服务器上。然后所有请求在接下来的20分钟时间戳中返回,返回缓存的结果。任何不满足时间标准的请求都会触发新数独的生成和缓存。

答案#2:只需将时间检查服务并返回一个表示服务不可用的标志。

没有什么是WCF特定的,就像在评论中一样,你必须编写逻辑。