Ошибка таймаута WCF с хорошим кодом

У меня есть проект, который использует службу WCF для выполнения некоторых запросов к базе данных, строит объект "Среда" (который состоит из разных объектов класса базы данных) и возвращает его внутри объекта "Рабочая область" для клиента. Все работает нормально.

Я добавил еще один тип "База данных" в службу со всеми правильными обновлениями контрактов и методов. Теперь, когда я вызываю метод, клиент истекает через 1 минуту. При отладке это займет около 3-5 секунд, чтобы попасть в конец сервисного метода. Тогда ничего не происходит в течение оставшейся части минуты, пока на стороне клиента мы не увидим проблему с таймаутом. Ошибок/исключений не было.

См. Ниже:

Вызов от клиента:

490 m_ScanWorkspace = m_Connection.ScanProxy.CreateEnvironments

Метод завершения обслуживания:

477 return tWorkspace;
478 }

Для перехода на линию 478 в службе требуется 3-5 секунд. F10 показывает, что он завершен.

Ничего не происходит до 1 минуты позже, когда в строке 490 на клиенте отображается ошибка тайм-аута. во время отладки я могу видеть действительный объект в tWorkspace.

1 ответ

Во-первых, настройте трассировку WCF с использованием пространства имен Diagnostics. Просто используйте первый пример этого учебника, и WCF выведет журнал всех действий, которые вы можете открыть в средстве просмотра журналов. Он точно скажет вам, где происходит сбой вызова, что поможет вам определить проблему.

WCF велик, но сообщения об ошибках, которые он дает, являются загадочными и часто близкими к бесполезным. Тайм-аут после 1 минуты не обязательно означает то, что обычно означает тайм-аут, т.е. не мог найти сервер. Это могут быть другие проблемы.

Скорее всего, будет превышен порог, который заставляет объект ответа быть неполным. Это может быть длина массива, длина содержимого строки, размер сообщения и т.д. Вы найдете здесь некоторые из них: тут

Удачи!

licensed under cc by-sa 3.0 with attribution.