RIA服务匹配对请求的响应

时间:2010-09-28 08:38:11

标签: wcf-ria-services system.reactive reactive-programming

我想知道是否有人可以就以下问题提供一些建议。我们目前正在开发基于RIA .NET服务的Silverlight 4应用程序。应用程序中的一个屏幕允许用户键入搜索字符串,在2秒不活动后,请求将提交给我们的域服务。所有这些都可以很好地处理Rx。

现在可以在原始文件返回之前执行第二次搜索。第二个请求也可能在第一个请求之前返回。

真的,我只想找出人们用来管理正确请求的正确响应的模式和方法。

您是否在请求中使用某种操作标识符? 您是否为每个请求创建域服务的新实例? 有没有把完成的请求事件绑定到Rx observable监视textchange事件?

任何操舵都会非常有用,

戴夫

4 个答案:

答案 0 :(得分:2)

你应该很容易解决这个问题。

如果我假设您有一个可观察的字符串来启动搜索,并且您有一个域服务,在给定字符串时会返回Result对象,那么这就是您需要的代码类型:

IObservable<string> searchText
    = ...;

Func<string, IObservable<Result>> searchRequest
    = Observable.FromAsyncPattern<string, Result>(
        search.BeginInvoke,
        search.EndInvoke);

IObservable<Result> results
    = (from st in searchText
       select searchRequest(st))
      .Switch();

神奇的是Switch扩展方法,它“切换”到IObservable<IObservable<Result>>返回的最新observable - 是的,它是一个嵌套的observable。

当新的searchText进入时,查询会返回从传入的搜索文本创建的新IObservable<Result>Switch然后切换results observable以使用这个最新的observable,并忽略任何先前创建的observable。

结果是只观察到最新的搜索结果,并且忽略了之前的所有结果。

希望这是有道理的。 : - )

答案 1 :(得分:1)

Erik Meijer在这里解决了这个问题(约30分钟后):http://channel9.msdn.com/Events/MIX/MIX10/FTL01 他在大约36分钟后解释了Switch声明。

答案 2 :(得分:0)

IMO的简单方法是在将任何请求分派给WCF之前通知您通知的请求主题。然后,而不是订阅从已完成的事件创建的observable订阅CompletedEventObservable.TakeUntil(RequestsSubject)。这样,您将永远不会收到对先前请求的响应的通知。

答案 3 :(得分:0)

查看rxx http://rxx.codeplex.com/

它有大量额外的东西,这将有所帮助,特别是在你的情况下,我认为动态对象和可观察的对象道具可能会让你的生活更轻松。