WCF не прекращает звонок клиенту - PullRequest
0 голосов
/ 26 октября 2019

У меня проблема со службой WCF, которая размещена на виртуальной машине Windows 2016 в Azure, работающей в IIS 10.

Служба - это, по сути, тестовая служба, в которую я добавляю операцию Control - Thread.Sleep (timer), а длительность отправляется в качестве параметра, определенного в operationContract.

Проблема в том, что задание продолжительности ожидания до 4,2 секунд выполняется без проблем, но если я вызываю службу, указав 5 секунд для запуска. Процесс задачи заканчивается через 5 секунд, с кодом выше, внутренний регистратор уведомляет меня, что я закончил, но по какой-то причине WCFTestClient все еще ожидает ответа и продолжает ждать, пока не будет достигнуто настроенное время ожидания. В этом случае у меня есть Receive_timeout и Send 10 минут с обеих сторон в конфигурации службы и в конфигурации клиента.

В качестве доказательства я создал локальную среду в своей сети, смонтировал службу на сервере, и здесьчерез 5 минут или даже 9 минут тестовый тестовый клиент ведет себя как ожидалось.

[OperationContract]
    public void TestServiceTimeout (int timer)
    {
        try
        {
            log.Info("Start test Service");
            System.Threading.Thread.Sleep(timer);
            log.Info("End test srervices");
        }
        catch (Exception ex)
        {
            log.Error($"An error ocurred. Details: {ex.Message}");
            throw;
        }
    }

Web.Config IIS

<binding name="Control.ws.sTest.customBinding0" receiveTimeout="00:20:00" 
        sendTimeout="00:20:00">
      <binaryMessageEncoding />
      <httpTransport />
    </binding>

WCFTestClient Config

<bindings>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_sFacturacion" sendTimeout="00:10:00" />
        </basicHttpBinding>
    </bindings>
    <client>
        <endpoint address="http://localhost:60000/ws/sFacturacion.svc"
            binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_sFacturacion"
            contract="sFacturacion" name="BasicHttpBinding_sFacturacion" />
    </client>

1 Ответ

0 голосов
/ 29 октября 2019

WCF не будет активно выключать клиента, даже если сервер находится в автономном режиме, клиент получит исключение связи после того, как истечет заданное время ожидания. Пожалуйста, обратитесь к приведенному ниже определению настроек тайм-аута.
https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/configuring-timeout-values-on-a-binding
Не стесняйтесь, дайте мне знать, если есть что-то, с чем я могу помочь.

...