在WCF服务中与Host对象交互

时间:2011-12-07 12:27:23

标签: c# wcf

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

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

1 个答案:

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