У нас есть пользовательский прослушиватель для нашего решения WCF, который наследуется от ChannelListenerBase<IDuplexSessionChannel>
.
У нас клиент с плохим поведением (вне нашего контроля), который ведет с нами протокол TCP по следующим строкам:
SYN
SYN,ACK
RST
По сути, они пытаются выполнить операции с сокетом до его установки, сбой и закрытие сокета.
В нашем OnEndAcceptChannel
коде мы не можем создать канал, потому что основной сокет уже закрыт к тому времени, как мы туда доберемся, и мы получаем исключение SocketException. Тогда это, кажется, убивает слушателя мертвым, останавливая его, принимая дальнейшие соединения.
Начиная с OnEndAcceptChannel
, мы попытались вернуть значение null, выдать исключение и вывести из строя прослушиватель, чтобы он мог быть перезапущен выше по стеку вызовов. Последнее - единственное найденное нами решение, которое позволит каналу эффективно продолжать прослушивание, но имеет неприятный (и неприемлемый) побочный эффект - уничтожение всех установленных соединений со службой.
Кто-нибудь получил какие-либо предложения о том, как справиться с этой ситуацией, продолжать слушать, и не потерять установленных связей ...?