响应式 WCF 客户端的双工回调或客户端线程

Posted

技术标签:

【中文标题】响应式 WCF 客户端的双工回调或客户端线程【英文标题】:Duplex Callbacks or Client-Side Threading for Responsive WCF Clients 【发布时间】:2010-09-30 20:54:27 【问题描述】:

我有一项服务,其中特定功能的调用时间比其他服务要长,有时它们可​​能需要几秒钟才能返回。为了防止客户端的 UI 在发生这种情况时被阻止,首选的解决方案是:

    使用双工通道并在收到数据时简单地使用回调来更新 UI。 使用单独的线程调用服务,简单的使用request-reply操作,然后在返回数据时更新ui线程。

哪种解决方案更好,特别是在互操作性受到青睐但并非绝对必要的情况下,并且在您看来,哪种解决方案的实施和维护更快(更清洁)?

【问题讨论】:

【参考方案1】:

如果您实施回调合同,那么您就无需客户端实施多线程代码。在使用 .Net 客户端时,这可能不是一个显着优势(因为 VS 会自动为您生成异步代理代码),但在使用其他平台/语言的客户端时可能会被证明是有益的。

哪个更干净?好吧,这取决于您是客户端还是服务器开发人员。如果,正如我在您的情况下所怀疑的那样,您两者都是,并且您可以将 .Net 用于客户端和服务器,那么我可能会暂时避免回调。如果您暗示服务调用需要 45 秒,那么我会说回调合同,这确实是主观的,但如果我要伸出脖子,那么我会说如果响应时间超过 5 秒那么是时候转向回调了。

【讨论】:

【参考方案2】:

您应该实现CallBackcontract。

这是example。

【讨论】:

使用 CallbackContract(又名双工通道)而不是在客户端使用线程有什么特别的原因吗?

以上是关于响应式 WCF 客户端的双工回调或客户端线程的主要内容,如果未能解决你的问题,请参考以下文章

请求-响应与双工 WCF 消息交换模式

在 WCF 双工合同中检测客户端死亡

WCF的三种模式

如果出现故障,如何自动重新建立双工通道?

使用 SignalR、WCF 双工服务和 ASP.Net 通用处理程序向客户端推送通知?

WCF 双工连接(服务器 <-> 没有第二个客户端的客户端通信)