我正在创建一个带网络的游戏应用程序,我正在尝试使用WCF。最终它将是一个点对点系统,但出于开发目的,我将应用程序拆分为核心和播放器应用程序。这意味着WCF服务需要与主机和客户端上的数据进行交互。所以我的问题是如何获得服务与主机应用程序上的对象进行交互。如果我将ServiceBehaviour属性的InstanceContextMode设置为InstanceContextMode.Single,那么我可以将类实例传递给ServiceHost构造函数,然后可以与Host对象进行交互,但是当我将类类型传递给ServiceHost构造函数时,该怎么做呢? ,如果我使用PerCall或PerSession InstanceContextMode,我必须这样做。
WCF服务的所有简单示例都使用计算器之类的东西。使用Calculator示例,您可以通过类/接口的方法参数从客户端传递数据,而无需与主机上的任何对象进行交互。我使用错误的工具来完成工作吗?
答案 0 :(得分:0)
看看WCF中的全双工通信......您应该能够找到一大堆聊天室示例(这是一个很好的并行 - 许多客户通过中央服务器维护状态)。
http://msdn.microsoft.com/en-us/library/ms731064.aspx
双工服务合同是一种消息交换模式,其中包含两者 端点可以独立地向另一个发送消息。双工 因此,服务可以将消息发送回客户端端点, 提供类似事件的行为。当a时发生双工通信 客户端连接到服务并为服务提供通道 服务可以将消息发送回客户端。注意 双工服务的类似事件的行为仅适用于 会话。
编辑看起来这个问题与如何访问共享服务器状态有关......
有很多方法可以做到这一点。一种方法是在服务器端创建一个管理共享状态的类的单例实例:
public class GameState
{
public static readonly GameState Instance = new GameState()
private GameState()
{
}
public PlayerPosition[] GetPlayerPositions()
{
}
}
然后,在以PerCall实现的服务中:
public class MyGameService : IGameService
{
public PlayerPosition[] GetPlayerPositions()
{
return GameState.Instance.GetPlayerPositions();
}
}