2016-12-20 23 views
1

Я создал архитектуру, образованную клиентом и сервером, который связывается с каналом WCF в локальном хосте, все работает нормально, но если нет активности (запросы от клиента) между двумя более 10 минут сервер больше не отвечает. Соединение все еще живое, но просто сервер не отвечает на запрос клиента, поэтому клиент должен отключиться и снова подключиться для возможности отправки запроса на сервер. Возможно, я допустил проскальзывание некоторых параметров.WCF Channel: сервер не отвечает через 10 минут

Адрес, который я использовал: net.tcp: // localhost: 8080/ICS; Тип канала: дуплекс;

+0

Посмотрите на '' inactivityTimeout' и receiveTimeout'. – Johnny

+0

Да, похоже, это проблема. Я нашел эту статью http://www.rauch.io/2015/06/25/all-wcf-timeouts-explained/, где объясняются все таймауты, а также время ожидания для неактивности и получения - 10 минут. –

+0

Проблема в том, что операция обслуживания не возвращается в течение разумного времени или что вы знаете, что операция службы работает долго, но вызывающий абонент отключается? –

ответ

1

Проблема в receiveTimeout. Хост службы использует этот таймаут, чтобы определить, когда следует отключать простоя. Если в течение заданного промежутка времени не получено сообщение, соединение закрывается. По умолчанию это 10 минут.

+0

таймаут неактивности, релевантный только при использовании поддержки WCF для WS-ReliableMessaging. Там нет ничего в вопросе OPs, чтобы предположить, что они есть. Кроме того, тайм-аут приема является настройкой на стороне потребителя и не влияет на сторону обслуживания, где проблема оказывается в случае OPs. –

+0

Я уверен, что 'receiveTimeout' не является настройкой для потребителя. И я также добавил 'inactivityTimeout' там, потому что есть некоторые зависимости, и оба должны быть выровнены, потому что некоторые комбинации не имеют смысла. – Johnny

+0

Обновление, ReliableMessaging отключено, поэтому редактировать InactivityTimeout не имеет смысла, как сказал Том Редферн. В то время как изменение параметра ReceiveTimeout моих настроек привязки решает проблему. –

0

Update, ReliableMessaging не включен поэтому редактировать InactivityTimeout не имеет смысла

Принимая во внимание изменения ReceiveTimeout параметр моих обязательных настроек решает эту проблему.

Мой код:

var bind = new NetTcpBinding();     // my binding instance 
var relSessionEnabled = bind.ReliableSession.Enabled;   // this is false 
var inactivityTimeout = bind.ReliableSession.InactivityTimeout; // this is 10 minutes 
bind.ReceiveTimeout = TimeSpan.MaxValue;   // this was 10 minutes before this instructuion