У меня есть служба Windows, которая в основном является хостом WCF (привязка net.tcp) для нескольких сотен клиентов. Он содержит ряд различных служб WCF, некоторые из которых являются дуплексными.
Он также имеет простое TCP-соединение с одним конкретным клиентом.
Чтобы еще больше усложнить ситуацию, приложение загружает сторонний SDK, который устанавливает дополнительные соединения TCP с другими серверами.
По мере увеличения количества клиентов я обнаружил, что он случайным образом сбрасывает все сетевые подключения: более конкретно, все каналы WCF перестают отвечать, а обычное TCP-соединение перестает отвечать. Каналы WCF не отключаются, а остаются подключенными до истечения времени ожидания (через одну минуту).
Клиенты, в конечном итоге, могут заново преобразовать свои соединения, и соединение TCP также восстанавливается.
Я подозреваю, что приложение может просто стать слишком занятым для обслуживания всех соединений, и буферы TCP могут быть переполнены. Но если бы это было так, я бы подумал, что он будет реагировать медленнее - однако это не так, все соединения останавливаются одновременно и не восстанавливаются (приложение легко сможет обработать все ожидающие запросы в течение 1 минуты). Тайм-аут).
Я не ожидаю, что кто-либо решит эту проблему напрямую, поскольку она довольно расплывчата, и я не могу предоставить пример кода, но я надеюсь, что смогу найти несколько советов, как отладить проблему.