2012-04-28 2 views
0

Проблема: Я работаю над приложением Silverlight, и я загружаю много данных в DomainContext, то есть из веб-службы. Он начинает запускать несколько разных запросов, при этом BusyIndicator отображает текущий запрос, но когда он добирается до запроса с наибольшим количеством данных, он зависает. Через несколько минут он говорит, что сервер не отвечает на следующий запрос.Silverlight зависает при загрузке данных DomainContext

Отладочные решения: Система работает, когда загружаю меньше данных. Я предполагаю, что это время, и поэтому он говорит, что следующий запрос не существует, т. Е. Он даже не может связаться с веб-службой. Некоторое время я оглядывался, и люди предлагали увеличить время ожидания и максимальный размер результата. Они решили другие проблемы, поэтому я знаю, что они работают (т. Е. Что они применяются), но это не решает эту проблему.

Я попытался изолировать проблему, чтобы убедиться, что это не какая-то глупая проблема, которая не имеет ничего общего с загрузкой данных. Проблемы возникают при возврате из функции запроса в веб-службе (результат возврата, ниже), то есть не должно быть проблем с самой веб-службой. Таким образом, выполняется отладочная печать, а вторая - 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); 
... 

Кроме того, проблема, как представляется, на стороне клиента, так как старый клиент (т.е. до возникновения проблемы) до сих пор работает с новым сервером. Тем не менее, я переживал различия в репозитории с тех пор, как возникла проблема, и я не могу найти ничего, что должно иметь значение (не говоря о том, что его нет).

Может ли кто-нибудь помочь мне с этой проблемой? Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.

ответ

0

Прочитав недавно, как работает среда WCF, и о философии, стоящей за ней. Microsoft не предлагает играть с таймаутом специально, если вы блокируете графический интерфейс. Они выступают за то, что если вызов займет более 60 секунд, чтобы завершить редизайн, может потребоваться. Рассматривая использование пейджинга, я понимаю, что этот шаблон ui может не относиться ко всем видам данных, но если вы загружаете столько данных, кажется невероятным, что пользователю нужно будет все это увидеть одновременно.

У меня возникла аналогичная проблема, возникшая у меня пару недель назад, и мы изменили реализацию веб-сервиса, чтобы выполнить многократную вставку, которая требовалась с использованием многопоточного дизайна. Это позволило нам сократить время обработки услуги до менее 60 секунд.

Надеюсь, это поможет,

Cheers,

Смежные вопросы