Время ожидания службы WCF SP1 истекло - PullRequest
2 голосов
/ 25 июля 2011

Мое решение - Silverlight, в котором используется служба WCF RIA SP1 и Entity Framework 4.

У меня проблема с загрузкой данных большого размера.

У меня есть это сообщение об ошибке.

System.ServiceModel.DomainServices.Client.DomainException: истекло время ожидания. Время ожидания истекло до завершения операции, или сервер не отвечает.

Я думаю, что это проблема с таймаутом, поэтому я попробовал приведенный ниже код. Это работало, когда я не установил сервис WCF Ria "SP1". Но он не работает, так как я установил «SP1».

ChannelFactory<BatchContext.IBatchServiceContract> channel = ((WebDomainClient<BatchContext.IBatchServiceContract>)this.DomainClient).ChannelFactory;
channel.Endpoint.Binding.OpenTimeout = new TimeSpan(0, 30, 0);  
channel.Endpoint.Binding.CloseTimeout = new TimeSpan(0, 30, 0);    
channel.Endpoint.Binding.ReceiveTimeout = new TimeSpan(0, 30, 0);    
channel.Endpoint.Binding.SendTimeout = new TimeSpan(0, 30, 0);

Что мне делать?

1 Ответ

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

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

Прежде всего, для вызова служб 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); 

    }
}

Я жду ваших отзывов.

...