2010-02-04 20 views
0

Greetings, 我们公司正在开发wcf服务。这被用作服务器,它工作得很好。悬停有一个客户的愿望,他们登录到应用程序后,他们希望看到哪些用户也登录。 我读过关于CallbackContract(基于一些wcf聊天应用程序)。我们如何实现这一目标?Multiple DataContract Callbackcontract

回答

1

类似的问题问here

您可以deffinetly管理服务器内的登录用户。我创建了一个个人模式来处理这种情况下,它ussually是这样的:

  • 创建,将持有的所有有关客户端所需要的信息的WCF服务器内的客户端类。

  • 在服务中创建2个方法:logIn,logOut。登录方法应该能够收集有关您想要存储的客户端的所有信息。确保定义可以唯一标识客户端实例的属性。当客户端向服务器通报时,它调用登录方法,允许服务器收集并保存来自客户端的信息。如果使用回调,这是在客户端obejt中保存CallBack上下文对象的地方。您现在可以将客户端对象保存在WCF服务器实例中(我使用了一个词典)。当客户端注销时,它会调用注销方法,服务器将删除该条目。

  • 在服务器中创建一个KeepAlive方法,用于检查连接的客户端是否仍然连接(在网络故障或应用程序崩溃的情况下,客户端可能不会调用注销方法)。

我觉得这是最简单的方法(不 说这是最好的)的服务器来管理客户 。没有 有多个客户端 问题来自同一台计算机(您保存客户端登录时 上下文)为 长,因为您有一个唯一的 标识客户端的方式。

至于你最后的问题,有 多个服务不应该是 的问题。事实上,对于您提供的不同服务 ,您拥有相同的WCF 服务器和不同的合同(和 端点)。 ALl合同位于 相同的WCF服务器实例中,因此它们都可以访问连接的客户端 列表。

如果您还有其他问题,我想 很乐意回答。

你可以找到你需要真正建立WCF服务的代码,你需要here

+0

wow..thank你尼尔它帮助了我很多。还有一个问题。你能否给我提供一些关于KeepAlive方法的建议,它会定期检查连接的客户端? – 2010-02-04 21:03:11

+0

基本上它是一个ping,服务器在客户端调用一个名为public void ping()的方法,并且如果调用导致CommuicationException,那么它意味着客户端无法响应,应该从联机客户端列表中删除。这个方法应该被放置在一个定时器中并且设置为每隔x分钟循环遍历所有客户端 – Neil 2010-02-05 07:11:30

+0

任何示例我该怎么做? – 2010-02-05 07:33:11