Збільшення значення тайм-ауту в службі WCF


133

Як я можу збільшити тайм-аут за замовчуванням до більшого, ніж на 1 хвилину, для послуги WCF?


Незрозуміло, але я думаю, що ви неявно запитуєте, чи можна налаштувати на серверній стороні час відключення будь-яких дзвінків, обробка яких займає більше однієї хвилини. Це неможливо
— gravidThoughts

Відповіді:


196

Ви маєте на увазі сторону сервера чи клієнт?

Для клієнта ви хочете налаштувати атрибут sendTimeout обов'язкового елемента. Для послуги, ви хочете налаштувати ReceiveTimeout атрибут зв'язування elemnent.

<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>
....

Звичайно, ви повинні зіставити бажану кінцеву точку саме на цю прив'язку.


Як відобразити прив'язку, використовуючи 'імя зв’язку' всередині тега кінцевої точки?
— Бланкер

Це просто неправильно. На receiveTimeoutстороні сервера регулюється визначення холостості для прив'язки на основі сеансу. Наприклад, сервер не використовуватиме цей параметр для базових прив'язокHTTP. Вам доведеться
— прокрутити

45

У меню «Інструменти» у Visual Studio 2008 (або у 2005 році, якщо у вас встановлений правильний файл WCF), є параметри під назвою «Редактор конфігурації служби WCF».

Звідти ви можете змінити параметри прив'язки як для клієнта, так і для служб, один з цих варіантів буде для тайм-аутів.


Інструмент - це чудовий спосіб уникнути помилок, таких як загортання елементів неправильним способом, написання написань тощо. Хороший дзвінок!
— markaaronky

Дивись також тут для іншого інструмента , щоб відкрити файли журналу: stackoverflow.com/a/34283667/187650
— ЮФО


8

Можна вибрати два способи:

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

Окрім тимчасових тайм-файлів прив’язки (які є в Timespan), вам може знадобитися і це. Це за секунди.

<system.web>
    <httpRuntime executionTimeout="600"/><!-- = 10 minutes -->
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.