Сбой WCF приводит к большому количеству потоков

В настоящее время я отправляю информацию через WCF на 2 конечные точки. Иногда одна конечная точка останавливается для обслуживания. В течение этого времени я вижу увеличение количества потоков моего отправляющего приложения. Когда конечная точка будет перезапущена (через несколько часов или дней), она получит поток вызовов, и количество потоков в приложении-отправителе вернется к норме. Я использую следующий netTCPBinding, но я не вижу, как отправляющее приложение буферизует эти запросы (и, таким образом, увеличивает количество потоков). Я использую Parallel.ForEach при отправке информации на две конечные точки.

<netTcpBinding>
    <binding name="HANetTcp" receiveTimeout="00:01:00" sendTimeout="00:00:05"> 
      <security mode="None"/> 
    </binding>
  </netTcpBinding>

person user815809    schedule 28.05.2014    source источник
comment
Итак, в чем именно проблема? Имеет ли количество потоков практический эффект?   -  person John Saunders    schedule 29.05.2014
comment
@JohnSaunders Да, он убивает приложение, как только может, и потребляет весь пул потоков служб, если конечная точка находится в автономном режиме более нескольких часов. То, что я пытаюсь найти, является основной причиной этого.   -  person user815809    schedule 29.05.2014
comment
Поскольку вы используете Parallel.ForEach, я бы начал с предположения, что это ваша проблема.   -  person John Saunders    schedule 29.05.2014
comment
Да, используя его с ConcurrentBag, в котором также есть несколько сообщений, но ничего, что могло бы привести к сохранению буфера, но, возможно, ссылка на поток может где-то удерживаться. Хотя идентифицировать очень сложно.   -  person user815809    schedule 29.05.2014
comment
Что происходит, когда вы не используете Parallel.ForEach?   -  person John Saunders    schedule 29.05.2014
comment
@JohnSaunders Удалены все ссылки на Parallel и та же проблема.   -  person user815809    schedule 29.05.2014
comment
Основной причиной @JohnSaunders было использование TimerCallback с MethodImplOptions.Synchronized, который каким-то образом удерживал ссылки на потоки (не всегда, но достаточно, чтобы исчерпать пул потоков)   -  person user815809    schedule 29.05.2014


Ответы (1)


Основной причиной было использование TimerCallback с MethodImplOptions.Synchronized, который каким-то образом удерживал ссылки на потоки (не всегда, но достаточно, чтобы исчерпать пул потоков) —

person user815809    schedule 29.05.2014