Я знаю, что этот вопрос довольно старый, но я вижу, что на него действительно не было ответа.Есть два тайм-аута (ну, только 1, если вы не используете надежный обмен сообщениями), которые вам следует учитывать, когда речь идет о тайм-ауте каналов.На стороне службы у вас есть «ReceiveTimeout», которое запускается, если в течение периода ожидания не было получено ни одного сообщения приложения.По умолчанию этот тайм-аут составляет 10 минут.
Существует также «InactivityTimeout», который используется только в том случае, если включен «ReliableSession».Этот тайм-аут - это максимальная продолжительность, в течение которой канал позволяет другой взаимодействующей стороне не отправлять никаких сообщений до выхода из строя канала.
Чтобы увеличить время жизни вашего канала, я рекомендую включить «ReliableSession», а затем установить оба «ReceiveTimeout "&" InactivityTimeout "для более высокого значения.ReliableSession поддерживает канал живым, отправляя ILM (сообщения уровня инфраструктуры), такие как keep-alive (сообщения также отправляются).Если сообщение keep-alive или ALM (сообщение уровня приложения) не получено до истечения срока действия «InactivityTimeout», канал выйдет из строя.
Более того, если ALM (сообщение уровня приложения) не было получено до «ReceiveTimeout»«истекает, когда канал выйдет из строя.
Итак, рекомендуется либо увеличить оба тайм-аута до одного и того же значения, либо установить« ReceiveTimeout »на более высокое значение, чем« InactivityTimeout ».
AПримечание: установка «ReceiveTimeout» не будет иметь никакого эффекта при установке на стороне клиента, это только тайм-аут на стороне службы.Но при использовании ReliableSession на стороне службы клиент также должен реализовать это следующим образом:
NetTcpBinding binding = new NetTcpBinding
{
ReliableSession = { Enabled = true },
SendTimeout = TimeSpan.FromMinutes( 1 )
};
binding.ReliableSession.InactivityTimeout = TimeSpan.Parse( "24.20:31:23.6470000" );
И app.config на стороне службы будет выглядеть примерно так:
<bindings>
<netTcpBinding>
<binding name="netTestTcpBinding"
receiveTimeout="24.20:31:23.6470000">
<reliableSession inactivityTimeout="24.20:31:23.6470000"
enabled="true" />
</binding>
</netTcpBinding>
</bindings>
<services>
<service>
<endpoint address="IServiceContract"
binding="netTcpBinding"
bindingConfiguration="netTestTcpBinding"
name="serviceContractTcpBinding"/>
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:12001/" />
</baseAddresses>
</host>
</service>
</services>