在Silverlight中删除过时的WCF响应

在Silverlight中删除过时的WCF响应,wcf,silverlight,asynchronous-wcf-call,Wcf,Silverlight,Asynchronous Wcf Call,在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

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


现在我想知道是否有更好的方法。也许有什么现成的功能使这成为可能?欢迎任何想法。

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


在进行新的服务调用之前,我确实考虑过取消旧的服务调用,但是Silverlight中没有对web服务的
CancelAsync
调用,我一直无法找到一种等效的方法来实现这一点。

这两种方法都是我在处理具有大量服务调用的实时系统时采用的方法。基本上只是有一些方法来跟踪顺序(递增变量、时间戳等),然后跟踪接收到的最高响应。如果当前响应低于最高值,则将其删除