2010-09-28 49 views
1

我想知道是否有人可以就以下問題提供一些建議。我們目前正在開發基於RIA .NET服務的Silverlight 4應用程序。應用程序中的其中一個屏幕允許用戶鍵入搜索字符串,並在2秒鐘不活動後將請求提交給我們的域服務。這與Rx很好地結合在一起。RIA服務匹配對請求的響應

現在可以在原件返回之前執行第二次搜索。第二個請求也可能在第一個請求之前返回。

真的,我只是想找出人們用什麼模式和方法來管理對正確請求的正確響應。

您在請求中使用某種操作標識符嗎? 您是否爲每個請求創建了您的域服務的新實例? 是否有將請求的完成事件綁定到Rx可觀察監視textchange事件?

任何轉向將是有益的真,

戴夫

回答

0

的simples方式IMO是對您通知之前的任何請求被分派到WCF請求的對象。然後,而不是訂閱從完成的事件創建的可觀察到訂閱CompletedEventObservable.TakeUntil(RequestsSubject)。這樣,您將永遠不會收到對前一個請求的響應的通知。

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>>返回的最新可觀察值 - 是的,它是一個嵌套的可觀察值。

當新的searchText進來時,查詢返回從傳入的搜索文本創建的新的IObservable<Result>Switch然後切換results可觀察到使用這個最新觀察,並忽略任何以前創建的observables。

因此,結果是隻有最新的搜索結果被觀察到,並且任何先前的結果都被忽略。

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

0

退房RXX http://rxx.codeplex.com/

它噸的多餘的東西,這將有助於,特別是在你的情況,我認爲,動態對象和觀察的對象道具可能是東西,這將使您的生活更輕鬆。