Служба WCF - работа с клиентами с плохим поведением? - PullRequest
2 голосов
/ 12 декабря 2011

У нас есть пользовательский прослушиватель для нашего решения WCF, который наследуется от ChannelListenerBase<IDuplexSessionChannel>.

У нас клиент с плохим поведением (вне нашего контроля), который ведет с нами протокол TCP по следующим строкам:

SYN  
SYN,ACK  
RST  

По сути, они пытаются выполнить операции с сокетом до его установки, сбой и закрытие сокета.

В нашем OnEndAcceptChannel коде мы не можем создать канал, потому что основной сокет уже закрыт к тому времени, как мы туда доберемся, и мы получаем исключение SocketException. Тогда это, кажется, убивает слушателя мертвым, останавливая его, принимая дальнейшие соединения.

Начиная с OnEndAcceptChannel, мы попытались вернуть значение null, выдать исключение и вывести из строя прослушиватель, чтобы он мог быть перезапущен выше по стеку вызовов. Последнее - единственное найденное нами решение, которое позволит каналу эффективно продолжать прослушивание, но имеет неприятный (и неприемлемый) побочный эффект - уничтожение всех установленных соединений со службой.

Кто-нибудь получил какие-либо предложения о том, как справиться с этой ситуацией, продолжать слушать, и не потерять установленных связей ...?

1 Ответ

1 голос
/ 12 декабря 2011

Нам удалось это исправить в конце.Вместо того, чтобы возвращать null, мы возвратили экземпляр фиктивного класса, реализующего IDuplexSessionChannel, который по сути является тупым конечным автоматом, и ничего более - обманывает WCF для продолжения независимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...