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

问题描述:

当谈到客户端/服务器应用程序时,我是一名新手。 (我只编程的asp.net应用程序).NET WCF - 服务器正在处理时更新客户端GUI

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

应用场景:

客户将关键字传递给服务器,例如“图书”。

然后,服务器将根据此关键字开始1秒 - 10分钟的搜索匹配数据处理。

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

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

我的问题是:

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

什么样的WCF协议?基于MSMQ的双面打印,轮询?

相关示例代码,初学者工具包等的任何链接,欢迎:)

如果您使用WCF,MSMQ将是传输层(“绑定”使用WCF术语),并没有真正给你想在这里做什么相关的(你会NetMsmqBindingWsHttpBinding VS之间进行选择NetTcpBinding,仅举几例)。您可以使用轮询或双工绑定,也可以完全有效,但实现方式会有很大不同。

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

使用双工服务也是一种有效的方法,但如果您从未使用过WCF,实施起来可能会更加复杂。通过双工服务,在您的ServiceContract的定义中,您可以定义一个CallbackContract,这是您的服务用于将消息发送回客户端的另一个ServiceContract。在你的情况下,我认为你需要在你的CallbackContract中进行两个不同的操作,一个用来报告每个结果,另一个用来指示所有结果已被检索,以便你的客户知道不会有任何更多结果并关闭该通道。 The MSDN documentation on Duplex services是相当彻底的,但WCF肯定有一点学习曲线。

+0

感谢您的好解释,您会推荐使用Duplex还是Polling? ,任何主要的性能优势?我看到这篇文章http://*.com/questions/1949427/effective-pattern-for-getting-progress-info-about-a-method-that-takes-a-long-time(Bryan Batchelder),谈论实现投票的方式看起来很复杂。也许你知道我在哪里可以找到这个长投票的任何代码示例? – RuSh 2011-04-30 10:34:36

因为我只是把它刺伤我只是给你这个指针开始寻找。

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

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