0

在 Silverlight 中,我遇到了以下问题。如果您向 Web 服务发出多个请求,则响应可能不会按顺序返回。这意味着如果第一个请求比以下请求花费的时间更长,它的响应将最后返回:

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 也可以工作。

现在我想知道是否有更好的方法来解决这个问题。也许有任何开箱即用的功能可以使这成为可能?欢迎任何想法..

4

2 回答 2

2

我在我的非 WCF ASP.NET Web 服务中采用了类似的方法,尽管我使用DateTime请求的 ,然后只存储DateTime最新请求的 。这样我可以直接进行小于比较来确定返回的服务是否是最新的。

在进行新的服务调用之前,我确实考虑过取消旧的服务调用,但是CancelAsyncSilverlight 中没有对 Web 服务的调用,而且我一直无法找到一种等效的方法来执行此操作。

于 2009-06-09T18:55:53.587 回答
0

当我在具有大量服务调用的实时系统上工作时,这两种方法都是我所采用的。基本上只是有一些方法来跟踪订单(递增变量、时间戳等),然后跟踪收到的最高响应。如果当前响应低于最高响应,则放弃它。

于 2009-06-09T22:10:21.137 回答