1

Мне было интересно, может ли кто-нибудь дать совет по следующей проблеме. В настоящее время мы разрабатываем приложение Silverlight 4 на основе RIA .NET Services. Один из экранов в приложении позволяет пользователям вводить строку поиска, и через 2 секунды бездействия запрос отправляется в нашу службу домена. Все это прекрасно сочетается с Rx.RIA Сервисы, отвечающие запросу на запрос

Теперь можно выполнить второй поиск до возвращения оригинала. Возможно также, что второй запрос может вернуться до первого.

Действительно я просто пытаюсь выяснить, какие шаблоны и подходы люди используют для правильного ответа на правильный запрос.

Вы используете какой-либо идентификатор операции в своих запросах? Создаете ли вы новые экземпляры своих доменных служб для каждого запроса? Есть ли возможность связать завершенное событие запроса с наблюдаемым мониторингом событий обмена текстовыми сообщениями?

Любые кормила бы полезно на самом деле,

Dave

ответ

0

В Simples пути ИМО должен иметь предмет для запросов, которые вы сообщаете, прежде чем любой запрос отправляются в 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 на использование этого последнего наблюдаемого и просто игнорирует любые ранее созданные наблюдаемые.

Таким образом, наблюдаются только самые последние результаты поиска, и любые предыдущие результаты игнорируются.

Надеюсь, это имеет смысл. :-)

0

Заканчивать Rxx http://rxx.codeplex.com/

Она тонны дополнительного материала, который поможет, в частности, в вашем случае, я думаю, что динамические объекты и наблюдаемый реквизит объекта могут быть что-то, что сделает вашу жизнь проще.