0

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

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

我尝试隔离问题以确保它不是与加载数据无关的其他愚蠢问题。从 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);
...

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

谁能帮我解决这个问题?如果您需要更多信息,请告诉我。

4

1 回答 1

0

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

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

希望这会对你有所帮助,

干杯,

于 2012-04-28T13:30:53.717 回答