.NET WCF - 在服务器处理时更新客户端GUI

时间:2011-04-29 21:20:51

标签: .net wcf client-server

对于客户端/服务器应用程序,我是新手。 (我只编写了asp.net应用程序)

我想创建一个包含多个WinForm客户端和一个.NET服务器的应用程序(我正在考虑WCF)。 客户端和服务器之间的通信应该在http(端口80)上。

应用场景:

客户端会将关键字传递给服务器,例如“books”。

然后,服务器将根据此关键字启动1秒 - 10分钟的搜索匹配数据流程。

服务器将找到结果列表(从1个结果到N个结果)。

我希望客户端在服务器搜索时使用找到的结果更新GUI。 (不要等到服务器完成)。

我的问题是:

WCF是服务器端的正确选择吗?

什么样的WCF协议?双工,轮询,基于MSMQ?

欢迎任何指向相关示例代码,入门套件等的链接:)

2 个答案:

答案 0 :(得分:1)

如果您正在使用WCF,MSMQ将成为传输层(“绑定”以使用WCF术语)并且与您在此处尝试的内容无关(您可以选择NetMsmqBinding vs 。WsHttpBindingNetTcpBinding,仅举几例。您可以使用轮询或双工绑定,并且要么完全有效,尽管实现方式会有很大不同。

为了实现轮询方法,我建议使用基于会话的WCF服务。只要您保留客户端中WCF服务的代理,您的会话就会持续,并且您将继续使用相同的代理来获取您的请求的更新,直到它最终返回状态为已完成。对于客户端和服务来说,这似乎相当简单。

使用双工服务也是一种有效的方法,但如果您从未使用过WCF,则实施起来可能会更复杂。使用双工服务时,在ServiceContract的定义中,您定义了CallbackContract,这是您的服务用于将邮件发送回客户端的另一个ServiceContract。在您的情况下,我认为您需要在CallbackContract中进行2个不同的操作,一个用于报告每个结果,另一个用于表示已检索到所有结果,因此您的客户知道不再期待任何结果并关闭这个频道。 The MSDN documentation on Duplex services相当彻底,但WCF肯定有一点学习曲线。

答案 1 :(得分:0)

因为我只是在捅它,我只会给你这个指针开始看。

使用Stream作为返回类型,并使用IEnumerable,同时在每次传递记录搜索时执行返回收益。如果将每个记录手动序列化为JSON,则可以将数据转储到Stream。

客户端的一个潜在示例是尝试使用流式Twitter API(http://dev.twitter.com/pages/streaming_api),这将允许您测试使用Stream的客户端并验证您的概念证明的后端在服务器端之前。