Как я могу настроить getTimeout и sendTimeout на бесконечность с помощью этого контакта WCF?

У меня есть следующий app.config в моем хосте:

<services>
  <service name="DCC_Service.DCCService" behaviorConfiguration="serviceBehavior">
    <endpoint binding="netNamedPipeBinding" contract="DCC_Service.IDCCService" address="DCCService" />
    <endpoint binding="mexNamedPipeBinding" contract="IMetadataExchange" address="mex" />
    <host>
      <baseAddresses>
        <add baseAddress="net.pipe://localhost/"/>
      </baseAddresses>
    </host>
  </service>
</services>

<behaviors>
  <serviceBehaviors>
    <behavior name="serviceBehavior">
      <serviceMetadata httpGetEnabled="false"/>
    </behavior>
  </serviceBehaviors>
</behaviors>

Как установить тайм-ауты netNamedPipeBinding на бесконечность aka Timespan.MaxValue?

Ответы

Ответ 1

Используйте infinite для различных значений тайм-аута - закройте, откройте, получите и отправьте. Вы указываете эти таймауты в такой конфигурации привязки.

<bindings>
    <netNamedPipeBinding>
        <binding name="mybinding" closeTimeout="infinite" openTimeout="infinite"
            receiveTimeout="infinite" sendTimeout="infinite" />
    </netNamedPipeBinding>
</bindings>

Раздел bindings находится на том же уровне, что и секции services и behaviors. Осталось только ссылаться на конфигурацию привязки в конечной точке службы.

<services>
  <service name="DCC_Service.DCCService" behaviorConfiguration="serviceBehavior">
    <endpoint binding="netNamedPipeBinding"
        contract="DCC_Service.IDCCService"
        address="DCCService"
        bindingConfiguration="mybinding"/>         <!-- SEE THIS LINE -->
    <endpoint binding="mexNamedPipeBinding"
        contract="IMetadataExchange"
        address="mex" />
    <host>
      <baseAddresses>
        <add baseAddress="net.pipe://localhost/"/>
      </baseAddresses>
    </host>
  </service>
</services>

<behaviors>
  <serviceBehaviors>
    <behavior name="serviceBehavior">
      <serviceMetadata httpGetEnabled="false"/>
    </behavior>
  </serviceBehaviors>
</behaviors>

Я не помню специально (и у меня нет времени на то, чтобы посмотреть прямо сейчас), но вам, возможно, придется поместить этот материал в свою конфигурацию клиента.

Ответ 2

Установите его как максимальный временной интервал, который равен 10675199.02: 48: 05.4775807

sendTimeout="10675199.02:48:05.4775807"

Ответ 3

Вы также можете указать максимальный тайм-аут, как показано ниже

{

            binding.CloseTimeout = TimeSpan.MaxValue;

            binding.OpenTimeout = TimeSpan.MaxValue;

            binding.ReceiveTimeout = TimeSpan.MaxValue;

            binding.SendTimeout = TimeSpan.MaxValue;

}