У меня проблема с моим приложением WCF.Я использую netTcpBinding для моего приложения.А на стороне клиента я использую ClientBase <> для подключения к хосту и ICommunicationObject.State для проверки, доступен ли канал.
Проблема в том, что после «receiveTimeout» соединение TCP обрывается, но на стороне клиента, когда я проверяю состояние, оно все еще "Открыто".И когда я пытаюсь использовать его напрямую, возникают исключения.
Чтобы подтвердить отключение сокета TCP, я использую TCPView для его мониторинга.Он отключается после тайм-аута.Но состояние канала не обновляется.
Точно, я добавляю диагностический журнал в конфиг сервера.И я получаю исключение сразу после истечения времени ожидания (в то же время происходит отключение).
Вот исключение (на стороне сервера):
System.ServiceModel.CommunicationObjectAbortedException, System.ServiceModel, версия = 3.0.0.0, культура = нейтральная, PublicKeyToken = b77a5c561934e089 System.Net.Sockets.SocketException, система, версия = 2.0.0.0, культура = нейтральная, PublicKeyToken = b77a5c561934e089 Ошибка TCP (995: операция ввода-вывода имеетбыл прерван из-за выхода из потока или из-за запроса приложения) при передаче данных.
И если я пытаюсь снова вызвать службу из клиента, на стороне клиента я получаю это исключение:
System.ServiceModel.CommunicationException: соединение с сокетом было прервано.Это может быть вызвано ошибкой обработки вашего сообщения или превышением тайм-аута приема удаленным хостом, или проблемой основного сетевого ресурса.
Я думаю, что это нормально для исключения на стороне клиента.Но я не знаю, нужно ли мне обрабатывать исключения на стороне сервера.
У кого-то есть идея?
Спасибо всем большое.