Збільшення значення тайм-ауту в службі 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.