gpt4 book ai didi

c# - WCF 实例管理

转载 作者:太空宇宙 更新时间:2023-11-03 16:51:08 27 4
gpt4 key购买 nike

我正在创建一个使用双工绑定(bind)与 WCF 服务对话的 silverlight 纸牌游戏

每个客户端在轮到他们时通过发送他们的 ID 和他们想要玩的牌来与服务通信

作为响应,更新的游戏状态被传输到每个客户端

虽然我一直在测试,但我已经按如下方式设置了实例

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

这意味着游戏状态保存在内存中。

现在,如果我想将其设置为广泛使用(它不太可能非常流行,但假设可能同时玩超过 1 个游戏),最合适的 WCF 实例化模式是什么?

我目前正在考虑在每个玩家轮到之后将游戏状态序列化到一个文档数据库,然后在未来的客户端通信中重新获取它

但是我很想知道是否有一种方法可以在内存中保持游戏状态,但是对于多个游戏

例如如果有 3 个游戏同时进行,游戏 A 的客户端是否可以连接到一个服务实例,而游戏 B 的客户端可以连接到另一个实例?

或者让每个客户端传递游戏 ID 并从数据库或其他数据存储中检索序列化游戏状态的唯一方法是什么?

编辑:

我对共享服务特别感兴趣 - 请参阅这篇文章 http://msdn.microsoft.com/en-us/magazine/cc163590.aspx但这在我使用的 WCF 版本中似乎不可用。我只有 Single,Persession 和 PerCall

最佳答案

InstanceContextMode(您可能知道)是 PerSession、PerCall 或 Single。这些都不支持为服务的特定实现维护单个实例的场景。相反,这些指的是服务和客户端之间连接的性质。例如,PerSession 将为每个新的客户端 session 创建您的服务实现的新实例。

我认为理想的解决方案是将已保存的游戏存储在按游戏类型键控的数据库中,但将正在进行的游戏保存在单个实例的内存中。

但是,如果您确实需要在客户端之间实现实例共享,那么there is some documention on this .

关于c# - WCF 实例管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3941011/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com