与WCF服务中的宿主对象交互

本文关键字:宿主 对象 交互 WCF 服务 | 更新日期: 2023-09-27 18:16:57

我正在创建一个具有网络的游戏应用程序,我正在尝试利用WCF。最终它将成为一个点对点系统,但出于开发目的,我将应用分为核心应用和玩家应用。这意味着WCF服务需要与主机和客户机上的数据进行交互。所以我的问题是我如何获得一个服务来与宿主应用程序上的对象进行交互。如果我将ServiceBehaviour属性的InstanceContextMode设置为InstanceContextMode。然后我可以传递一个类实例给ServiceHost构造函数,然后可以与Host对象交互,但是当我传递一个类类型给ServiceHost构造函数时,我如何做到这一点,如果我使用PerCall或PerSession InstanceContextMode,我必须这样做。

所有WCF服务的简单示例都使用了计算器之类的东西。在Calculator示例中,您可以通过类/接口的方法参数从客户机传递数据,并且不需要与主机上的任何对象进行交互。我用错工具了吗?

与WCF服务中的宿主对象交互

看看WCF中的全双工通信…您应该能够找到一大堆聊天室示例(这是一个很好的并行-许多客户端通过中央服务器维护状态)。

http://msdn.microsoft.com/en-us/library/ms731064.aspx

双工服务契约是一种消息交换模式端点可以独立地向另一个端点发送消息。一个双因此,服务可以将消息发送回客户机端点,提供类似事件的行为。双工通信发生在客户端连接到服务,并为服务提供通道在此基础上,服务可以将消息发送回客户机。请注意,双工服务的类事件行为仅在会话。

EDIT看起来这个问题更多的是关于如何访问共享服务器状态…

有很多方法可以做到这一点。一种方法是在管理共享状态的服务器端创建一个类的单例实例:

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();
       }
 }