Увеличение значения времени ожидания в службе WCF - PullRequest
126 голосов
/ 08 января 2009

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

Ответы [ 5 ]

187 голосов
/ 08 января 2009

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

Для клиента вы бы хотели настроить атрибут 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>
....

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

43 голосов
/ 08 января 2009

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

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

8 голосов
/ 05 августа 2010

Разные таймауты означают разные вещи. Когда вы работаете над клиентом ... вы, вероятно, в основном смотрите на SendTimeout - проверьте эту ссылку - замечательное и уместное объяснение: http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/84551e45-19a2-4d0d-bcc0-516a4041943d/

5 голосов
/ 18 января 2017

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

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

0 голосов
/ 04 июня 2018

В дополнение к тайм-аутам привязки (в Timespan с), вам также может понадобиться это. Это в секундах.

<system.web>
    <httpRuntime executionTimeout="600"/><!-- = 10 minutes -->
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...