Увеличение значения тайм-аута в службе WCF

Как увеличить время ожидания по умолчанию до более 1 минуты в службе WCF?

Ответ 1

Вы имеете в виду серверную или клиентскую сторону?

Для клиента вы хотите настроить атрибут sendTimeout элемента привязки. Для службы вы хотите настроить атрибут receiveTimeout элемента привязки.

<system.serviceModel>
  <bindings>
    <netTcpBinding>
      <binding name="longTimeoutBinding"
        receiveTimeout="00:10:00" sendTimeout="00:10:00">
        <security mode="None"/>
      </binding>
    </netTcpBinding>
  </bindings>

  <services>
    <service name="longTimeoutService"
      behaviorConfiguration="longTimeoutBehavior">
      <endpoint address="net.tcp://localhost/longtimeout/"
        binding="netTcpBinding" bindingConfiguration="longTimeoutBinding" />
    </service>
....

Конечно, вам нужно сопоставить желаемую конечную точку с этим конкретным привязкой.

Ответ 2

В меню "Инструменты" в Visual Studio 2008 (или 2005, если у вас есть права на WCF файл), есть параметры, называемые "Редактор конфигурации службы WCF".

Оттуда вы можете изменить параметры привязки как для клиента, так и для служб, один из этих вариантов будет использоваться для тайм-аутов.

Ответ 4

Вы можете выбрать два способа:

1) кодом в клиенте

public static void Main()
{
    Uri baseAddress = new Uri("http://localhost/MyServer/MyService");

    try
    {
        ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService));

        WSHttpBinding binding = new WSHttpBinding();
        binding.OpenTimeout = new TimeSpan(0, 10, 0);
        binding.CloseTimeout = new TimeSpan(0, 10, 0);
        binding.SendTimeout = new TimeSpan(0, 10, 0);
        binding.ReceiveTimeout = new TimeSpan(0, 10, 0);

        serviceHost.AddServiceEndpoint("ICalculator", binding, baseAddress);
        serviceHost.Open();

        // The service can now be accessed.
        Console.WriteLine("The service is ready.");
        Console.WriteLine("Press <ENTER> to terminate service.");
        Console.WriteLine();
        Console.ReadLine();

    }
    catch (CommunicationException ex)
    {
        // Handle exception ...
    }
}

2) WebConfig на веб-сервере

<configuration>
  <system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding openTimeout="00:10:00" 
                 closeTimeout="00:10:00" 
                 sendTimeout="00:10:00" 
                 receiveTimeout="00:10:00">
        </binding>
      </wsHttpBinding>
    </bindings>
  </system.serviceModel>

Подробнее см. официальную документацию

Настройка значений тайм-аута при привязке

Класс WSHttpBinding