我有一个Silverlight 4应用程序,通过创建对客户端的回调来使用WCF双工。从客户端,我有一个方法,从数据库中检索所有行(不是真的,但对于这个例子)。使用回调将每一行发送到客户端。我需要弄清楚如何在启动后中止此过程。例如,假设我已经厌倦了在屏幕上滚动显示此表中的所有行。我想看到另一个表中的行。如何在中间停止第一个动作?
我以为我可以在服务器上创建一个新的操作来中止处理,但这对于已经通过回调发送的内容并等待被客户端接收而无法做任何事情。
我正在寻找一种方法来保证一旦新的搜索开始,我就没有任何旧的数据可以被客户端接收。有没有人对最佳方法有任何想法?
很有趣 - 在使用双工服务之前,我的问题是我无法快速获取数据。现在我正在使用双面打印,我无法关闭它!
答案 0 :(得分:1)
我可以想到两种方法来解决这个问题。注意:我也没有测试过,毫无疑问是其他人。
(1)在客户端或服务器端,中止连接并重新建立新连接。有点hacky,我可以从经验中说出围绕这种“现在你看到它现在你不要”的连接是PITA。
(2)在服务器端,最初只发送一定数量的数据,然后缓存其余数据,直到从客户端收到您确实想要查看下一位的通知。这类似于许多“分页”UI所使用的方法。这种变化的方法是排队数据,而不是对客户端的调用。将它们放在某种Action变量中,排队,只有在客户端说“Yup,给我下一个50”后才执行回调。
不幸的是,我不知道有什么方法可以告诉OperationContext,“中止所有待处理的呼叫,但保持频道有效。”也许它在那里,但我找不到它。很高兴有更多知识和经验的人纠正我。