Проблема времени ожидания службы RIA Silverlight 4 WCF - PullRequest
2 голосов
/ 11 ноября 2010

У меня есть пользовательский контроль Silverlight 4, который вызывает очень долго работающую службу RIA WCF.Как показано ниже, я увеличиваю период ожидания по умолчанию.

_domainContext = new WindowsDashboardDomainContext();
// Increase timeout -- this can be a very long running query
((WebDomainClient<WindowsDashboardDomainContext.IWindowsDashboardDomainServiceContract>)
_domainContext.DomainClient).ChannelFactory.Endpoint.Binding.SendTimeout = new TimeSpan(99, 0, 0);
    _domainContext.GetSections( "All", "All", "All" ).Completed += GetAllSectionsCompleted;

К сожалению, он, похоже, игнорирует этот тайм-аут и по-прежнему выдает исключение тайм-аута:

Ошибка: необработанная ошибка в операции загрузки приложения Silverlight не выполнена для запроса 'GetClicks'.Произошла ошибка при выполнении определения команды.Смотрите внутреннее исключение для деталей.Внутреннее сообщение об исключении: истекло время ожидания.Время ожидания истекло до завершения операции или сервер не отвечает.в System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands (EntityCommand entityCommand, поведение CommandBehavior)

Почему это происходит?

Ответы [ 2 ]

2 голосов
/ 18 сентября 2012

Я ответил на тот же вопрос здесь: Служба WCF ria Тайм-аут SP1 истек

Ответ:

Я объясню свой контекст и хочу, чтобы он работал длямой.Я уверен в этом.

Прежде всего для вызова служб RIA и использования некоторого доменного контекста, в моем примере:

EmployeeDomainContext context = new EmployeeDomainContext();
InvokeOperation<bool> invokeOperation = context.GenerateTMEAccessByEmployee(1, 'Bob');
invokeOperation.Completed += (s, x) =>
    {....};

Ничего нового, пока здесь.И с этим я сталкивался каждый раз с тем же самым исключением тайм-аута через 1 минуту.Я провожу довольно много времени, пытаясь понять, как изменить определение тайм-аута, я перепробовал все возможные изменения в Web.config и ничего.Решение было:

Создать CustomEmployeeDomainContext, который является частичным классом , локализованным по тому же пути сгенерированного кода , и этот класс использует метод ловушки OnCreate, чтобы изменить поведение контекста созданного домена,В этом классе вы должны написать:

public partial class EmployeeDomainContext : DomainContext
{
    partial void OnCreated()
    {
        PropertyInfo channelFactoryProperty = this.DomainClient.GetType().GetProperty("ChannelFactory");
        if (channelFactoryProperty == null)
        {
            throw new InvalidOperationException(
              "There is no 'ChannelFactory' property on the DomainClient.");
        }

        ChannelFactory factory = (ChannelFactory)channelFactoryProperty.GetValue(this.DomainClient, null);

        factory.Endpoint.Binding.SendTimeout = new TimeSpan(0, 10, 0); 

    }
}

Я с нетерпением жду ваших отзывов.

1 голос
/ 06 апреля 2011

На ум приходят две возможности:

  1. Вы не настроили службу DomainService для сериализации достаточного количества объектов. Значение по умолчанию очень мало. Попробуйте этот совет Я положил вчера, чтобы увеличить распределение результатов
  2. Возможно, ваш источник данных истек. В этом случае вам необходимо увеличить время ожидания команды для LINQ to SQL, EF или ADO.NET соответственно. Это менее вероятная причина, но ее следует учитывать.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...