我正在使用WCF
并且正在我的C#
程序中放置一个聊天室设施。所以我需要能够从服务器向客户端发送两个事件的信息 -
- 当用户连接/断开连接时,我会更新已连接用户的列表并将其发送回所有客户端以在 TextBlock 中显示
- 当用户发布消息时,我需要服务器将该消息发送给所有客户端
因此,我正在寻找有关实施此方法的最佳方法的建议。我打算使用netTcpBinding
对客户端的双工回调,但后来我遇到了一些关于如果连接关闭则无法回调客户端的问题。我需要使用 percall 实例来实现可扩展性。我在这个线程中被告知我不应该打开连接,因为它会“显着限制可伸缩性” - WCF双工回调,我如何向所有客户端发送消息?
但是,我浏览了 Programming WCF Services 一书,作者似乎指出这不是问题,因为“在调用之间,客户端在代理的末尾持有一个没有实际对象的引用金属丝。这意味着您可以在客户端关闭代理之前很久就处理服务实例占用的昂贵资源'
- 那么哪个是正确的,让代理在客户端上保持打开状态可以吗?
- 但即使这很好,它也会导致另一个问题。如果服务实例在调用之间被销毁,它们如何进行双工回调来更新客户端?关于 percall 实例,Programming WCF Services 的作者说“因为一旦方法返回对象将被丢弃,你不应该分离后台线程或将异步调用分派回实例”
- 让客户轮询服务以获取更新会更好吗?我会想象这比双工回调效率低得多,客户端最终可能会像使用双工回调一样频繁地轮询服务 50 次以上。但也许没有别的办法?这可以扩展吗?我设想有数百个并发用户。