Удаление устаревших ответов WCF в Silverlight - PullRequest
0 голосов
/ 09 июня 2009

В Silverlight у меня появилась следующая проблема. Если вы отправляете несколько запросов к веб-службе, ответы могут не возвращаться в упорядоченной последовательности. Это означает, что если первый запрос занимает больше времени, чем следующие, его ответ вернется в конце:

1. Sending request A.. (takes longer for some reason)
2. Sending request B..
3. Sending request C..
4. ...
5. Receiving response B
6. Receiving response C
7. Receiving response A

Теперь в моем сценарии меня интересует только самая последняя сделанная просьба . Таким образом, A и B должны быть отброшены, а C - только принятым ответом.

Каков наилучший подход к управлению этим? Я придумал это решение до сих пор:

Передать сгенерированный GUID как пользовательский объект при отправке запроса и сохранить это значение где-нибудь. Поскольку все ответы будут содержать соответствующий GUID, теперь вы можете отфильтровывать устаревшие ответы. Счетчик запросов вместо GUID также будет работать.

Теперь мне интересно, есть ли лучшие подходы к этому. Может быть, есть какие-то из готовых функций, чтобы сделать это возможным? Любые идеи приветствуются ..

Ответы [ 2 ]

2 голосов
/ 09 июня 2009

Я использую аналогичный подход в своих веб-службах ASP.NET, отличных от WCF, хотя вместо этого я использую DateTime запроса, а затем просто сохраняю DateTime самого последнего запроса. Таким образом, я могу выполнить прямое сравнение меньше, чтобы определить, является ли возвращающая служба самой последней или нет.

Я пытался отменить старые вызовы службы, прежде чем делать новые, но в Silverlight нет вызова CancelAsync для веб-служб, и я не смог найти эквивалентный способ сделать это.

0 голосов
/ 10 июня 2009

Оба эти подхода - то, что я использовал, когда работал над системой реального времени с большим количеством обращений в сервис. В основном просто есть какой-то способ отслеживать порядок (инкрементная переменная, отметка времени и т. Д.), А затем отслеживать самый высокий полученный ответ. Если текущий ответ ниже, чем самый высокий, отбросьте его.

...