0

我有一个 Silverlight 4 应用程序,它通过创建对客户端的回调来使用 WCF 双工。从客户端,我有一个从数据库中检索所有行的方法(不是真的,但是对于这个例子)。每行都使用回调发送到客户端。我需要弄清楚一旦开始如何中止这个过程。例如,假设我厌倦了看到此表中的所有行在我的屏幕上滚动。我想查看另一个表中的行。如何在第一个动作中间停止它?

我以为我可以在服务器上创建一个新操作来中止处理,但这不会对已经通过回调发送并等待客户端接收的内容做任何事情。

我正在寻找一种方法来保证一旦新的搜索开始,我没有任何旧数据会被客户拾取。有没有人知道实现这一目标的最佳方法?

这很有趣——在使用双工服务之前,我的问题是我无法足够快地获取数据。现在我正在使用双面打印,我无法将其关闭!

4

1 回答 1

1

我可以想到两种方法来解决这个问题。注意:我也没有测试过,毫无疑问还有其他的。

(1) 在客户端或服务器端,中止连接并重新建立一个新连接。有点老套,我可以根据经验说,围绕这种“现在你看到它现在你不知道”的连接进行编码是一个 PITA。

(2) 在服务器端,最初只发送一定数量的数据,然后缓存其余的,直到您收到来自客户端的通知,您确实希望看到下一位。这类似于许多“分页”用户界面使用的方法。这种情况的一种变体是排队不是数据,而是对客户端的调用。将它们放入某种 Action 变量中,将它们排队,并且只有在客户端说“是的,给我下一个 50”时才执行回调。

不幸的是,我不知道有什么方法可以告诉 OperationContext,“中止所有挂起的调用,但保持通道处于活动状态。” 也许它在那里,但我一直无法找到它。很高兴有更多知识和经验的人纠正我。

于 2011-02-07T07:01:47.467 回答