在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也可以。
现在我想知道是否有更好的方法。也许有任何开箱即用的功能可以实现这一目标吗?欢迎任何想法..
答案 0 :(得分:2)
我在非WCF ASP.NET Web服务中采用了类似的方法,但我使用了请求的DateTime
,然后只存储了最新请求的DateTime
。通过这种方式,我可以直接进行比较,以确定返回的服务是否是最新服务。
我确实考虑过在取消旧服务之前取消旧服务,但在Silverlight中没有CancelAsync
调用Web服务,我无法找到相同的方法来执行此操作。
答案 1 :(得分:0)
这两种方法都是我在使用大量服务调用的实时系统上工作时所采用的方法。基本上只是有一些方法来跟踪顺序(递增变量,时间戳等),然后跟踪最高的接收响应。如果当前响应低于最高响应,则将其丢弃。