在客户端/服务器应用程序方面,我是新手。 (我只编写了 asp.net 应用程序)
我想创建一个包含 的应用程序多个 WinForm 客户端和一个 .NET 服务器(我正在考虑 WCF)。
客户端和服务器之间的通信应该在 http(端口 80)上。
应用场景:
客户端会将关键字传递给服务器,例如“books”。
然后,服务器将开始一个 1 秒到 10 分钟的过程,根据这个关键字搜索匹配数据。
服务器将查找结果列表(从 1 个结果到 N 个结果)。
我希望客户端在服务器搜索时使用找到的结果更新 GUI。 (不要等到服务器完成)。
我的问题是:
WCF 是服务器端的正确选择吗?
什么样的 WCF 协议(protocol)?双工、轮询、基于 MSMQ?
欢迎任何指向相关示例代码、入门工具包等的链接:)
最佳答案
如果您使用 WCF,MSMQ 将是传输层(“绑定(bind)”以使用 WCF 术语)并且与您在此处尝试执行的操作并不真正相关(您可以在 NetMsmqBinding
与 WsHttpBinding
与. NetTcpBinding
,仅举几例)。您可以使用轮询或双工绑定(bind),两者都是完全有效的,尽管实现会大不相同。
要实现轮询方法,我建议使用基于 session 的 WCF 服务。只要您在客户端中保留 WCF 服务的代理,您的 session 就会持续,并且您将继续使用相同的代理来获取您的请求的更新,直到它最终返回完成状态。对于客户端和服务来说,这似乎相当简单。
使用双工服务也是一种有效的方法,但如果您从未使用过 WCF,则实现起来可能会更加复杂。使用双工服务,在您的 ServiceContract
的定义中你定义一个 CallbackContract
,这是另一个 ServiceContract
您的服务用于将消息发送回客户端。在您的情况下,我认为您需要在 CallbackContract
中进行 2 个不同的操作。 ,一个用于报告每个结果,另一个用于指示已检索到所有结果,以便您的客户知道不再期待任何结果并关闭 channel 。 The MSDN documentation on Duplex services相当彻底,但 WCF 肯定有一点学习曲线。
关于.NET WCF - 在服务器处理时更新客户端 GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5837507/