对于客户端/服务器应用程序,我是新手。 (我只编写了asp.net应用程序)
我想创建一个包含多个WinForm客户端和一个.NET服务器的应用程序(我正在考虑WCF)。 客户端和服务器之间的通信应该在http(端口80)上。
应用场景:
客户端会将关键字传递给服务器,例如“books”。
然后,服务器将根据此关键字启动1秒 - 10分钟的搜索匹配数据流程。
服务器将找到结果列表(从1个结果到N个结果)。
我希望客户端在服务器搜索时使用找到的结果更新GUI。 (不要等到服务器完成)。
我的问题是:
WCF是服务器端的正确选择吗?
什么样的WCF协议?双工,轮询,基于MSMQ?
欢迎任何指向相关示例代码,入门套件等的链接:)
答案 0 :(得分:1)
如果您正在使用WCF,MSMQ将成为传输层(“绑定”以使用WCF术语)并且与您在此处尝试的内容无关(您可以选择NetMsmqBinding
vs 。WsHttpBinding
与NetTcpBinding
,仅举几例。您可以使用轮询或双工绑定,并且要么完全有效,尽管实现方式会有很大不同。
为了实现轮询方法,我建议使用基于会话的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的客户端并验证您的概念证明的后端在服务器端之前。