加载DomainContext数据时Silverlight冻结

时间:2012-04-28 02:59:04

标签: c# .net silverlight web-services ria

问题: 我正在开发一个Silverlight应用程序,我正在将大量数据加载到DomainContext中,即从Web服务加载。它开始运行几个不同的查询,BusyIndi​​cator显示当前查询,但当它到达具有最多数据的查询时,它会冻结。几分钟后,它说服务器没有响应下一个查询。

调试/尝试解决方案 当我加载较少的数据时,系统工作。我认为它超时了,这就是它说下一个查询不存在的原因,即它甚至无法联系Web服务。我环顾了一会儿,人们建议增加超时和最大结果大小。这些已经解决了其他问题,所以我知道它们有效(即它们正在被应用),但它并没有解决这个问题。

我尝试隔离问题,以确保它不是一些与加​​载数据无关的其他愚蠢问题。从Web服务中的查询函数返回时出现问题(返回结果; 下面),即Web服务本身不应该有问题。因此,两个调试打印都被执行,第二个显示2726个元素。

网络服务代码:

public IQueryable<Person> GetPeopleWithSubscription()
{
    Debug.WriteLine("Before");
    IQueryable<Person> result = test();
    Debug.WriteLine("After " + result.Count().ToString());
    return result;
}

private IQueryable<Person> test()
{
    return this.ObjectContext.People.Where(p =>
        p.Subscriptions.Count > 0 ||
        p.Subscriptions1.Count > 0 ||
        p.ID < 0);
}

致电代码:

...
_context.Load(_context.GetSubscriptionTypesQuery(), DataLoaded, false);
...

此外,问题似乎是在客户端,因为旧客户端(即在问题发生之前)仍然适用于新服务器。但是,自问题发生以来,我一直在浏览存储库中的差异,而且我找不到任何应该有所作为的东西(不是说它不存在)。

任何人都可以帮我解决这个问题吗?如果您需要更多信息,请告诉我。

1 个答案:

答案 0 :(得分:0)

最近阅读了WCF框架的工作原理及其背后的理念。如果您阻止GUI,Microsoft建议不要特别使用超时时间。他们提倡如果电话需要60秒以上才能完成重新设计,则可能需要。您是否考虑过使用分页,我知道这种ui模式可能不适用于所有类型的数据,但如果您要加载那么多数据,则用户需要同时查看所有数据似乎不太可能。

几个星期前我遇到了类似的问题,我们将Web服务实现更改为执行使用多线程设计所需的多次插入。这使我们能够将服务的处理时间缩短到不到60秒。

希望这对你有帮助,

干杯,