2011-09-20 59 views
0

我的Silverlight应用程序中有几个伪全局实体,这些实体使用来自服务器的数据填充。我的'服务代理'类作为单例在IoC容器中注册,因此它将缓存数据以防止对服务器的过度调用。将来自SL4应用程序的多个请求排队到某个服务

但是,我遇到了一个场景,其中多个请求正在对“服务代理”进行处理,而初始请求仍处于待处理状态。当我研究其他有助于解决问题的设计问题时,我想知道你可能有什么想法来解决这个问题。我最初的想法是以某种方式将请求排队,如果一个调用已经在进行,然后在数据被检索时处理它们。

+0

需要更多细节。听起来像是一个设计问题给我。为什么在初始请求处于待处理状态时发出了多个请求?为什么不设置某种标志/锁以防止进一步的请求,直到最初的请求完成?你能提供几个基本的代码片段吗? –

+0

最具体的是我们的应用程序设置,我们需要从服务器上拉下来初始化某些功能。多个视图(人眼视图模型)将尝试从我们的单件服务代理异步加载设置;不过,我不想多次打电话。我宁愿只将第一个请求转换成服务调用,然后让所有其他请求中止,直到调用返回,在这一点我可以触发所有的回调。 – SonOfPirate

+0

是的,我认为你是一个队列和锁定机制正确的方向。阅读这篇文章的一些想法:http://stackoverflow.com/questions/2465442/how-to-run-batched-wcf-service-calls-in-silverlight-backgroundworker –

回答

0

毕竟,我最终要用队列和锁定方法。我有一个“忙”标志,表示服务呼叫正在进行中。如果为true,则所有后续请求都会通过将回调委托添加到集合而排队,并且方法返回。当异步服务调用返回时,我只是遍历集合并执行每个回调。它似乎工作得很好(在一个异步模型)。

相关问题