Как избавиться от разрывов связи между десктопным приложением и сервером?
Привет! Работаем с WCF (Windows Communication Foundation) для клиент-серверных приложений. Клиент — трекер, десктопное приложение для трекинга, обработки и передачи данных в базу. Сам сервис хостится в десктопном приложении (админ) на удаленном сервере. Оба приложения написаны на wpf по шаблону mvvm, используем devexpress.
Проблема началась пару недель назад: перестали поступать запросы на сервер. Трекер зависал, нельзя было выполнить вход или сделать запрос к базе, если ты уже залогинен.
При присоединении к процессу приложения Админ, где крутится сервис, с тестового клиента не срабатывали брейкпоинты (но была ситуация когда во время теста сработали брейкпоинты, но на запросы с других клиентов, а не тестового). При нажатии на паузу во время проблем с подключением visual studio писала, что вы находитесь в break mode, но никакой код не выполняется.
Добавили логи трассировки на сервере (файл с расширением .svclog). Отловили, что проблема с запросами на сервер происходит, когда есть логи с нескольких потоков с определенного айпи и идет прием байтов (иногда айпи менялся на другой, с того же региона). Порядка 10 потоков обрабатывают запрос с этого айпи. И это может длится от 30 минут до часа. Практически все эти длинные запросы по логам заканчивались экспешенами (CommunicationException. Операция ввода/вывода была прервана из-за завершения потока команд или по запросу приложения; Попытка выполнить операцию для несуществующего сетевого подключения). Была пара длинных запросов, которые завершились без ошибок.
Поменяли в конфигурации сервиса вот такие параметры: ConcurrencyMode, UseSynchronizationContext. Это не помогло.
Заблокировали айпи, с которого шли длинные запросы, тоже не помогло. Сейчас единственное решение — перезагрузка Админа, когда случается зависание. Ошибка стабильно портит жизнь последние недели две. До этого разрывы случались очень редко. В сервисе до появления регулярных проблем давно ничего не меняли.