我有一个生成数独游戏的服务,客户端应该是Windows Phone用户,我正在进行在线竞争。
问题#1 如何在20分钟内为特定时间内的所有客户(访问服务)生成相同的数独游戏。 我读到了这个,我尝试使用以下内容:
[ServiceBehavior (InstanceContextMode = InstanceContextMode.Single,
ConcurrencyMode = ConcurrencyMode.Single)]
但它没有正常工作。
问题#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特定的,就像在评论中一样,你必须编写逻辑。